python 小型数据库-python库是什么
第13章数据库支持 13.1 Python数据库API
DB API2.0(标准数据库API)
1.全局变量
使用的 apilevel API 版本
threadsafety 线程安全度
SQL 查询中的 paramstyle 参数样式
apilevel (API level) 是一个字符串常量,指示所使用的 API 版本
此变量的值为“1.0”或“2.0”
threadsafety(线程安全度)是0-3的整数。
0:线程不能共享模块 2:线程可以共享模块和连接,但不能共享游标
如果您不使用线程,请忘记它。
paramstyle(参数样式) 'format'表示标准的字符串格式设置方法python 小型数据库,
'pyformat' 表示扩展格式编码
'qmark' 表示使用问号
'numeric' 表示使用 :1 或 :2 的形式来表示字段
'named' 表示使用 :foobar 的形式来表示字段
2、异常
DB API 定义了各种异常来处理错误。
StandardError 所有异常的超类
发生非致命问题时引发警告 StandardError
错误 StandardError 所有错误条件的超类
InterfaceError Error 与接口相关的错误(而不是数据库)
DatabaseError 数据库相关错误的错误超类
DataError DatabaseError 数据相关的问题,比如值超出合法范围
OperationalError DatabaseError 数据库操作中的内部错误
IntegrityError DatabaseError 关系完整性已被破坏,例如键未通过检查
InternalError DatabaseError 数据库内部错误,例如游标无效
ProgrammingError DatabaseError 用户编程错误,如找不到数据库表
NotSupportedError DatabaseError 请求不支持的功能python 小型数据库,例如回滚
3.连接和游标
要使用底层数据库系统,您必须首先连接到它。
使用函数 connect 进行连接。
连接常用参数:
参数名称描述是否可选
dsn 数据源名称,具体含义因数据库而异
用户名是
密码 用户密码是
主机主机名是
database 数据库名称是
connect 返回一个连接对象。
连接对象支持方法:
close() 关闭连接对象。之后,连接对象及其游标将不可用
commit() 提交一个未提交的事务——如果支持的话; 否则什么都不做
rollback() 回滚未提交的事务(可能不可用)
cursor() 返回连接的游标对象
#光标对象
使用游标执行 SQL 查询并查看结果
游标支持的方法:
callproc(name[, params]) 用指定的参数调用指定的数据库过程(可选)
close() 关闭游标。关闭后游标不可用
execute(oper[, params]) 执行 SQL 操作 - 可能指定参数
executemany(oper, pseq) 多次执行指定的SQL操作,每次以序列中的一组参数
fetchone() 依次获取查询结果中的下一行; 如果没有更多行,则返回 None
fetchmany([size]) 检索查询结果中的多行,其中参数size的值默认为arraysize
fetchall() 获取所有剩余的行作为序列序列
nextset() 跳转到下一个结果集,该方法可选
setinputsizes(sizes) 用于预定义参数的内存区域
setoutputsize(size[, col]) 设置用于检索大量数据的缓冲区大小
游标的属性
结果列描述的描述序列(只读)
rowcount 结果包含的行数(只读)
arraysize fetchmany返回的行数,默认为1
4.类型
DB API 定义了一些构造函数和常量来提供特殊的类型和值。
Date(year, month, day) 创建一个包含日期值的对象
Time(hour, minute, second) 创建一个包含时间值的对象
Timestamp(y, mon, d, h, min, s) 创建一个包含时间戳的对象
DateFromTicks(ticks) 根据自纪元以来经过的秒数创建一个包含日期值的对象
TimeFromTicks(ticks) 创建一个包含时间值的对象,该对象基于自纪元以来经过的秒数
imestampFromTicks(ticks) 根据纪元以来经过的秒数创建一个包含时间戳的对象
Binary(string) 创建一个包含二进制字符串值的对象
STRING 描述了一个基于字符串的列(例如 CHAR)
BINARY 描述二进制列(例如 LONG 或 RAW)
NUMBER 描述了一个数字列
DATETIME 描述日期/时间列
ROWID 描述行 ID 列
2.SQLite 和 PySQLite
SQLite 是一个小型的、本地可运行的数据库。
SQLite从python2.5开始就内置了
1.开始
进口:
导入sqlite3
建立连接:
conn = sqlite3.connect('somedatabase.db')
获取光标:
诅咒=连接。 光标()
得到的游标可以用于SQL查询。
查询执行后,如果修改了数据,需要提交修改后才能保存。
conn.commit()
紧密联系
康涅狄格州关闭()
2.例子
1.创建并填充数据库表
导入sqlite3
定义转换(值):
if value.startswith('~'):
返回值。 剥离('〜')
如果不是值:
值 = '0'
返回浮动(值)
conn = sqlite3.connect('food.db')
诅咒=连接。 光标()
诅咒。 执行('''
创建表食物(
id 文本主键,
描述文本,
水漂浮,
千卡浮动,
蛋白质漂浮物,
脂肪浮动,
灰漂浮,
碳水化合物浮动,
纤维漂浮物,
糖浮动
)
''')
query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)'
field_count = 10
对于打开的行('ABBREV.txt'):
字段 = 行。 分裂('^')
vals = [convert(f) for f in fields[:field_count]]
诅咒。 执行(查询,值)
conn.commit()
康涅狄格州关闭()
2.搜索和处理结果
导入 sqlite3,sys
conn = sqlite3.connect('food.db')
诅咒=连接。 光标()
query = 'SELECT * FROM food WHERE' + sys.argv[1]
打印(查询)
诅咒。 执行(查询)
names = [f[0] for f in curs.description]
对于 curs.fetchall() 中的行:
对于 zip 中的对(名称,行)L
print('{}: {}'.format(*pair))
打印()