《Python核心编程》第六章 数据库编程

2018-6-19

当文件或创建的数据存储系统不适用与大项目时,需要转而使用数据库。

数据库基本操作和SQL:

先介绍一些基本的数据库概念:

底层存储:数据库通常使用文件系统作为基本的持久化存储,他可以使普通的操作系统文件、专用的操作系统文件,甚至是原始磁盘分区。

用户接口:大多数数据库系统提供了命令行工具,可以执行SQL语句或查询,此外,还有一些GUI工具,使用命令行客户端或数据库客户端库,想用户提供更加便捷的界面。

数据库:一个关系数据库管理系统(RDBMS)可以管理多个数据库,比如销售,市场,用户支持等。MySQL是一种基于服务的RDBMS,因为它有一个服务器进程始终运行以等待命令行输入。

组件:数据库存储可以抽象成一张表。每行数据都有一些字段对应于数据库的列。每一列的表定义的集合以及每个表的数据类型放在一起定义了输句酷的模式(schema)。数据库有创建(create)和删除(drop)操作,表也是一样的。表的操作包括增加(insert)、删除(delete)、更新(updata)、查询(query)。当查询数据库时,可以一次性取回所有的结果(行),也可以逐条遍历每一行,一些数据库使用游标的概念来提交SQL命令、查询以及获取结果、不管是一次性获取还是逐行获取都可以使用该概念。

SQL:数据库命令和查询操作时通过SQL语句提交给数据库的。虽然并非所有数据库都使用SQL语句,但是大多数关系数据库使用。以下用一些具体的命令作为实例;大部分数据库是不区分大小写的,尤其是针对数据库命令。但一般来是对数据库的关键字要使用大写字母,语句的结束需要“;”。

例:

创建数据库:CREATE DATABASE test;

扫描二维码关注公众号,回复: 2891677 查看本文章

GRANT ALL ON test.* to user(s);#为指定用户提升权限,以便数据库的使用

使用数据库:

USE test;

删除数据库:

DROP DATABASE test;#从数据库中移除所有表和数据,并将数据库移除系统

创建表:

CREATE TABLE users (login VARCHAR(8), userid INT, projid INT);

删除表:

DROP TABLE users;

插入行:需要指定表名以及其中每列的值

INSERT INTO users VALUE('leanna', 2111,1);

leanna,2111,1分别对应创建表中的login,userid,projid。

更新行:

UPDATE users SET projid=4 WHERE projid=2;#projid为2的用户改为4

UPDATE uers SET projid=1 WHERE userid=311;#将指定的311用户移动到编号为#1的项目组中。

删除行:

DELETE FROM users WHERE projid=%d;

DELETE FROM  users;


数据库和Python

访问数据库包括直接通过数据库接口访问和使用ORM(对象关系映射)访问两种。其中,ORM方式不需要显示的给出SQL命令。

在python中,数据库是通过适配器的方式进行访问的。适配器是一个python模块,使用它可以与关系数据库的客户端库(通常由c语言编写)接口相连。一般会推荐所有的python适配器应当符合python数据库兴趣小组(DB-SIG)的API标准。

DB-API必须提供一下几个全局属性:

apilevel--需要适配器兼容的DB-API版本,比如:1.0,   2.0

threadsafety--本模块的线程安全级别。0:不支持线程安全,线程之间不共享模块。1:最小化线程安全支持:县城之间可以共享模块,但不能共享连接。2:适度的线程安全支持:线程之间可以共享模块和连接,但是不能共享游标。3:完整的线程安全支持:线程直接共享模块,连接和游标。

paramstyle--本模块的SQL语句参数风格:转自:https://blog.csdn.net/piglite/article/details/78474335

  

paramstyle

  
  

Meaning

qmark

Question   mark style, e.g. ...WHERE name=?

numeric

Numeric,   positional style, e.g. ...WHERE name=:1

named

Named   style, e.g. ...WHERE name=:name

format

ANSI   C printf format codes, e.g. ...WHERE name=%s

pyformat

Python   extended format codes, e.g. ...WHERE name=%(name)s


connect()--Connect()函数。转自:https://www.cnblogs.com/Eva-J/p/5133716.html


connect()通过Connect对象访问数据库。兼容模块必须实现connect()函数,该函数创建并且返回一个Connect对象。

可以使用包含多个参数的字符串(DSN)来传递数据库连接信息,也可以按照位置传递每个参数,或则是使用关键字参数的形式传入。

connect(dsn='myhost:MYDB', user='guido', password='234$')

参数主要包括user(用户名),password(密码),host(主机名),database(数据库名),dsn(数据源名)。

使用DSN还是独立参数主要基于所连接的系统。比如MySQLdb使用的是db而不是database

下面都是一些没有使用DSN的例子:

MySQLdb.connect(host=’dbserv’, db=’inv’, user=’smith’)

PgSQL.connect(database=’sales’)

psycopg.connect(database=’template1’, user=’pgsql’)

gadfly.dbapi20.connect(‘csrDB’, ‘/usr/local/database’)

sqlite3.connect(‘marketing/test’)

异常

Warning 警告异常基类

Error 错误异常基类

InterfaceError 数据库接口错误

DatabaseError 数据库错误

DataError 理数据时出错

OperationalError 数据库执行命令时出错

IntegrityError 数据完整性错误

InternalError 数据库内部出错

ProgrammingError SQL 执行失败

NotSupportedError 试图执行数据库不支持的特性

后面懒得写了,累的一匹!!!!!!!

猜你喜欢

转载自blog.csdn.net/qq_21210467/article/details/80737954