21.2 Python数据库应用程序 程序员接口(DB-API)
DB-API是一个规范。它定义了一系列必需的对象和数据库存取方式,以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口。
21.2.1 模块属性
一个DB-API兼容的模块必须定义如下所示的所有全局属性。
属性名 | 描述 |
apilevel | 模块兼容的DB-API版本号 |
threadsafety | 线程安全级别 |
paramstyle | 该模块支持的SQL语句参数风格 |
connect() | 连接参数 |
(异常) | -- |
1. 数据属性
(1) apilevel
这是一个字符串,表示这个DB-API模块所兼容的DB-API最高版本号,如'1.0'或'2.0'等,默认是'1.0'。
>>> import MySQLdb
>>> MySQLdb.apilevel
'2.0'
(2) Threadsafety
这是一个整型。取值如下:
- 0:不支持线程安全,多个线程不能共享此模块
- 1:初级线程安全支持:线程可以共享模块,但不能共享连接
- 2:中级线程安全支持:线程可以共享模块和连接,但不能共享游标
- 3:完全线程安全支持:线程可以共享模块、连接和游标
>>> MySQLdb.threadsafety
1
(3) Paramstyle
这同样也是一个字符串,表明SQL语句中字符串替代的方式。
参数风格 | 描述 | 示例 |
numeric(数字) | 数字位置风格 | WHERE name=:1 |
named(命名) | 命名参数风格 | WHERE name=:name |
pyformat | 字典格式转换 | WHERE name=%(name)s |
qmark(问号) | 问号风格 | WHERE name=? |
format | 标准ANSI C格式转换 | WHERE name=%s |
>>> MySQLdb.paramstyle
'format'
2. 函数属性
connect()方法生成一个连接对象。这个方法有五个参数:user、password、host、database和dsn。
e.g. connect(dsn='my', host='MYDB', user='guido', password='2349')
参数 | 描述 |
user | Username |
password | Password |
host | Hostname |
database | Database name |
dsn | Data source name |
- MySQLdb.connect(host='dbserv', db='inv', user='smith')
- PgSQL.connect(database='sales')
- psycopg.connect(database='templates1', user='pgsql')
- gadfly.dbapi20.connect('csrDB', '/usr/local/database')
- sqlite3.connect('marketing/test')
兼容标准的模块也应该提供这些异常类。
异常 | 描述 |
Warning | 警告异常基类 |
Error | 错误异常基类 |
InterfaceError | 数据库接口错误 |
DatabaseError | 数据库错误 |
DataError | 处理数据时出错 |
OperationalError | 数据库执行命令时出错 |
IntegerityError | 数据完整性错误 |
InternalError | 数据库内部出错 |
ProgrammingError | SQL执行失败 |
NotSupportedError | 试图执行数据库不支持的特性 |