python数据库适配器(一)

python数据库适配器(一)

创新互联公司-专业网站定制、快速模板网站建设、高性价比平桂网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式平桂网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖平桂地区。费用合理售后完善,十余年实体公司更值得信赖。

如上图是应用程序与关系型数据库的多层通信,第一个框一般是C/C++程序,后两个框是python程序。在python应用中,都是使用数据库适配器去访问数据库的,不同数据库有不同的适配器,但是都有一套标准,具体属性如下:

python的DB-API模块属性                                                                                           

该字符串(注意,不是浮点型)指明了模块需要兼容的DB-API 最高版本,比如,1.0、2.0 等。该属性的默认值是1.0。

这是一个整型值,可选值如下。
• 0:不支持线程安全。线程间不能共享模块。
• 1:最小化线程安全支持:线程间可以共享模块,但是不能共享连接。
• 2:适度的线程安全支持:线程间可以共享模块和连接,但是不能共享游标。
• 3:完整的线程安全支持:线程间可以共享模块、连接和游标。

参数风格     描 述                             示 例
numeric     数值位置风格                    WHERE name=:1
named       命名风格                        WHERE name=:name
pyformat    Python 字典printf()格式转换     WHERE name=%(name)s
qmark       问号风格                        WHERE name=?
format      ANSIC 的printf()格式转换WHERE   name=%s

参 数             描 述
user            用户名
password        密码
host            主机名
database/db     数据库名
dsn             数据源名
MySQLdb适配器不支持dsn,connect()函数调用参数的方法如:MySQLdb.connect(host='172.16.1.238',db='school',user='root',password='******')

<异常>

异 常                   描 述
Warning                 警告异常基类
Error                   错误异常基类
    InterfaceError          数据库接口(非数据库)错误
    DatabaseError           数据库错误
    DataError               处理数据时出现问题
    OperationlError         数据库操作执行期间出现错误
    IntegrityError          数据库关系完整性错误
    InternalError           数据库内部错误
    ProgrammingError SQL    命令执行失败
    NotSupportedError       出现不支持的操作

python的DB-API模块常见对象                                                                                                                                                                                                                                                 

使用MySQLdb模块操作mysql数据库的一个简单例子:

#-*- coding:utf-8 -*-
#AUTH:FJC
import MySQLdb
from _mysql_exceptions import *
#连接数据库,返回MySQLdb.connections.Connection对象
my_conn = MySQLdb.connect(host='172.16.1.238',db='school',user='root',password='123456')
#获取游标,返回MySQLdb.cursors.Cursor对象
my_cur = my_conn.cursor()
try:
    #执行数据库原生语句
    my_exec = my_cur.execute('select * from school.boys;')
    #返回查询结果的前两行
    print(my_cur.fetchmany(2))
    my_cur.execute('insert into school.boys values(4,"zhaoliu",20);')
    my_conn.commit()
except ProgrammingError:
    print("SQL语法错误!")
finally:
    my_conn.close()

与数据库交互的过程可以简单概括为(当然不止这些):

调用connect()方法返回一个Connect对象-->调用Connect对象的cursor()方法返回一个游标对象-->调用游标对象的execute*()和fetch*()方法等方法向数据库发送请求-->调用Connect对象的commit()方法提交事务-->调用Connect对象的close()方法关闭数据库连接

常用的对象如下:

Connect对象

Connect对象方法包括:
方 法 名                                     描 述
close ()                                    关闭数据库连接
commit()                                    提交当前事务,如果数据库不支持事务或开启了自动提交,该方法将无法使用
rollback()                                  取消当前事务,同样如果数据库不支持事务,该方法将无法使用
cursor()                                    使用该连接创建(并返回)一个游标或类游标的对象
errorhandler (cxn, cur, errcls, errval )    作为给定连接的游标的处理程序

Cursor对象

Python DB-API 游标对象总能提供游标的功能,即使是那些不支持游标的数据库。当游标创建好后,就可以执行查询或命令(或多个查询和命令),并从结果集中取回一行或多行结果。

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 行,例如:my_cur.fetchmany(2)返回查询结果的前两行
fetchall()                          获取查询结果的所有(剩余)行
__iter__()                          为游标创建迭代器对象(可选,参考next())
messages                            游标执行后从数据库中获得的消息列表(元组集合,可选)
next ()                             被迭代器用于获取查询结果的下一行(可选,类似fetchone(),参考__iter__())
nextset()                           移动到下一个结果集合(如果支持)
rownumber                           当前结果集中游标的索引(以行为单位,从0 开始,可选)
setinputsizes(sizes)                设置允许的最大输入大小(必须有,但是实现是可选的)
setoutputsize(size[,col])           设置大列获取的最大缓冲区大小(必须有,但是实现是可选的)

python字符串到数据库特殊对象转换常用的类型对象和构造函数:

类 型 对 象                                 描 述
Date (yr, mo, dy)                           日期值对象
Time (hr, min, sec)                         时间值对象
Timestamp (yr, mo, dy, hr, min, sec)        时间戳值对象
DateFromTicks (ticks)                       日期对象,给出从新纪元时间(1970 年1 月1 日00:00:00 UTC)以来的秒数
TimeFromTicks (ticks)                       时间对象,给出从新纪元时间(1970 年1 月1 日00:00:00 UTC)以来的秒数
TimestampFromTicks (ticks)                  时间戳对象,给出从新纪元时间(1970 年1 月1 日00:00:00 UTC)以来的秒数
Binary (string)                             对应二进制(长)字符串对象
STRING                                      表示基于字符串列的对象,比如VARCHAR
BINARY                                      表示(长)二进制列的对象,比如RAW、BLOB
NUMBER                                      表示数值列的对象
DATETIME                                    表示日期/时间列的对象
ROWID                                       表示“行ID”列的对象



分享文章:python数据库适配器(一)
网站路径:http://azwzsj.com/article/jpohog.html