每一种语言都少不了多数据库进行各种操作。
python支持多种数据库。有关python支持的数据库清单,请参阅:
https://wiki.python.org/moin/DatabaseInterfaces.
1. 全局变量
所有与DB API2.0兼容的数据库模块都必须包含三个全局变量,它们描述了模块的特征。这样设计,是的API设计更加灵活,无需进行太多包装就能配合多种不同的底层机制使用。
变量 apilevel :使用的Python DB API版本,如果没有这个变量,就说明模块不予DB API 2.0兼容。
变量 threadsafety :模块的线程安全程度。该值是一个0~3 ( 含 )的整数。0表示线程不能共享模块,3表示模块是绝对线程安全的。1表示线程可共享模块本身,但不能共享连接,2表示可以共享模块和连接,但不能共享游标。
变量 paramstyle :在SQL查询中使用哪种参数风格。
- 'format’表示标准的字符串格式化,如要在参数中进行拼接的地方插入%s。
- 'pyformat’表示扩展的格式代码,即旧式字典插入,比如%(foo)s。
- 'qmark’使用问号。
- 'numeric’使用 :1 和 :2 这样形式表示字段(数字表示参数的编号)。
- 'named’表示foobar这样的字段,其中foobar为参数名。
2. 异常
DB API 定义了多种异常,让你能够细致的处理错误。如:
异常 | 描述 |
---|---|
StandardError | 所有异常的超类 |
Warning | 所有非致命问题时引发 |
Error | 所有错误条件的超类 |
InterfaceError | 与接口相关的错误 |
DatabaseError | 与数据库相关的错误的超类 |
DataError | 与数据库相关的问题,如值不在合法的访问内 |
OperationalError | 数据库操作内部的错误 |
3. 连接和游标
要使用底层的数据库系统,必须使用函数connect进行连接。函数connect的常用参数如下:
参数名 | 描述 | 是否可选 |
---|---|---|
dsn | 数据库名称,具体含义随数据库而异 | 否 |
user | 用户名 | 是 |
password | 用户名 | 是 |
user | 用户名 | 是 |
password | 密码 | 是 |
host | 主机名 | 是 |
port | 端口号 | 是 |
database | 数据库名称 | 是 |
函数connect返回一个连接对象,表示当前到数据库的会话。连接对象支持如下方法:
方法 | 描述 |
---|---|
close() | 关闭连接对象。 |
commit() | 提交未提交的事务----如果支持的话;否则什么都不做 |
rollback() | 回滚为提交的事务(可能不可用) |
cursor() | 返回连接的游标对象 |
方法cursor返回一个游标对象,可以使用该对象来执行SQL查询和查看结果。游标对象的方法如下表。
方法 | 描述 |
---|---|
callproc(name,[, params]) | 使用指定的参数调用指定的数据库过程(可选) |
close() | 关闭游标 |
execute(oper[, params]) | 执行一个SQL操作-----可指定参数 |
executemany(oper, pseq) | 执行执行的SQL操作多次,每次都取序列pseq中的一组参数 |
fetchone() | 以序列的方式取回查询结婚中的下一行;如果没有更多的行,返回None |
fetchmany([size]) | 取回查询结果中的多行,其中参数size的值默认为arraysize |
fetchall() | 以序列的方式取回余下的所有行 |
nextset() | 跳到下一个结果集,这个方法是可选的 |
setinputsizes(sizes) | 用于为参数预定义内存区域 |
setoutputsize(size[, col]) | 为取回大量数据而设置缓冲区长度 |
4. 类型
对于插入到某些类型的列中的值,DB API 定义了一些构造函数和常量,用于提供特殊的类型和值。
名称 | 描述 |
---|---|
Date(year, month, day) | 创建包含日期值的对象 |
Time(hour, minute, second) | 创建包含时间值的对象 |
Timestamp(year, mon, day, h, min, s) | 创建包含时间戳的对象 |
DateFromTicks(ticks) | 根据从新纪元开始过去的秒数创建包含日期值的对象 |
TimeFromTicks(ticks) | 根据从新纪元开始过去的秒数创建包含时间值的对象 |
imestampFromTicks(ticks) | 根据从新纪元开始过去的秒数创建包含时间戳的对象 |
Binary(string) | 创建包含二进制字符串值得对象 |
STRING | 描述基于字符串的列(如CHAR) |
BINARY | 描述二进制列(如LONG、RAW) |
NUMBER | 描述数字列 |
DATETIME | 描述日期/时间列 |
ROWID | 描述行ID列 |
5. 操作数据库
要是用Python来操作数据库,一般分为下面几个步骤:
- 导入相应的数据库模块。
- 使用connect连接数据库。
- 获取操作游标。
- 使用游标执行增删改查(CRUD)语句。
- 可能还需要提交事务,使用commit方法。
- 关闭连接close。