DB-API
DB-API 是阐明一系列所需对象和数据库访问机制的标准,它可以为不同的数据库适配器和底层数据库系统提供一致性的访问
DB-API模块属性 | 描述 |
---|---|
apilevel | 需要适配器兼容的 DB-API 版本 |
threadsafety | 本模块的线程安全级别 |
paramstyle | 本模块的 SQL 语句参数风格 |
connect() | Connect()函数 |
DB-API异 常类 | 描 述 |
---|---|
InterfaceError | 数据库接口(非数据库)错误 |
DatabaseError | 数据库错误 |
DataError | 处理数据时出现问题 |
OperationlError | 数据库操作执行期间出现错误 |
IntegrityError | 数据库关系完整性错误 |
InternalError | 数据库内部错误 |
ProgrammingError SQL | 命令执行失败 |
NotSupportedError | 出现不支持的操作 |
Connection 对象
应用与数据库之间进行通信需要建立数据库连接。它是最基本的机制,只有通过数据库连接才能把命令传递到服务器,并得到返回的结果。当一个连接(或一个连接池)建立后,可以创建一个游标,向数据库发送请求,然后从数据库中接收回应。
Connection 对象方法 | 描述 |
---|---|
close () | 关闭数据库连接 |
commit() | 提交当前事务 |
rollback() | 取消当前事务 |
cursor() | 使用该连接创建(并返回)一个游标或类游标的对象 |
errorhandler (cxn, cur, errcls, errval ) | 作为给定连接的游标的处理程序 |
Cursor 对象
当建立连接后,就可以和数据库进行通信了。游标可以让用户提交数据库命令,并获得查询的结果行。 Python DB-API 游标对象总能提供游标的功能, 即使是那些不支持游标的数据库。此时,如果你创建了一个数据库适配器,还必须要实现 cursor 对象,
以扮演类似游标的角色。这样,无论你将数据库系统切换到支持游标的数据库还是不支持游标的数据库,都能保持 Python 代码的一致性。当游标创建好后,就可以执行查询或命令(或多个查询和命令),并从结果集中取回一行或多行结果。
Cursor对象属性 | 描 述 |
---|---|
arraysize | 使用 fetchmany()方法时,一次取出的结果行数,默认为 1 |
connection | 创建此游标的连接(可选) |
description | 返回游标活动状态(7 项元组):(name, type_code, display_size, internal_ size,precision, scale, null_ok),只有 name 和 type_code 是必需的 |
lastrowid | 上次修改行的行 ID(可选;如果不支持行 ID,则返回 None) |
rowcount | 上次 execute*()方法处理或影响的行数 |
callproc( func [,args]) | 调用存储过程 |
close() | 关闭游标 |
execute (op[,args]) | 执行数据库查询或命令 |
executemany (op, args) | 类似 execute()和 map()的结合,为给定的所有参数准备并执行数据库查询或命令 |
fetchone() | 获取查询结果的下一行 |
fetchmany([size=cursor. arraysize]) | 获取查询结果的下面 size 行 |
fetchall() | 获取查询结果的所有(剩余)行 |
__iter__() | 为游标创建迭代器对象(可选,参考 next()) |
messages | 游标执行后从数据库中获得的消息列表(元组集合,可选) |
next () | 被迭代器用于获取查询结果的下一行(可选,类似 fetchone(),参考__iter__()) |
nextset() | 移动到下一个结果集合(如果支持) |
rownumber | 当前结果集中游标的索引(以行为单位,从 0 开始,可选) |
setinputsizes(sizes) | 设置允许的最大输入大小(必须有,但是实现是可选的) |
setoutputsize(size[,col]) | 设置大列获取的最大缓冲区大小(必须有,但是实现是可选的) |
mysql-connector
python3建议使用mysql-connector模块
示例
>>>import mysql.connector
>>>cnx = mysql.connector.connect(user='hal',password='9714mm',host='192.168.253.129',database='mydb')
>>>cursor = cnx.cursor()
>>>query = ("show tables")
>>>cursor.execute(query)
>>>for data in cursor.fetchall():
... print(data)
...
('Customers',)
('OrderItems',)
('Orders',)
('Products',)
('Productustomers',)
('Vendors',)
('t1',)
一般流程就是用cursor.execute()执行命令,用cursor.fetchall()获取数据
参考文档: