十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
如上图是应用程序与关系型数据库的多层通信,第一个框一般是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”列的对象
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。