第十三章

13.1Python数据库API

13.1.1 全局变量

变量名描述
apilevel使用的Python DB API 的版本
threadsafety模块的线程安全程度
paramstyle在SQL查询中使用哪种参数

apilevel:字符串常量,没有这变量的时候说明模块与DB API2.0不兼容。
threadsafety:包含0,12,3四个整数,0表示线程不能共享模块,1表示可共享模块,但不能共享连接,2表示可共享模块与连接,但不共享游标,3表示模块是绝对线程安全。
13.1.2异常

异常(超类)描述
StandardError所有异常的超类
Waring(Standarderror)发生非致命问题时引发
Error(Standarderror)所有错误条件的超类
InterfaceError(Error)与接口相关的错误
DatabaseError(Error)与数据库相关的错误的超类
OperationalError(DatabaseError以下的超类都是这个)数据库操作内部的错误
DataError与数据相关问题,如值不在合法的范围
IntegrityError关系完整性遭到破坏,如键未通过检查
InternalError数据库内部的错误,如游标无效
ProgrammingError用户编程错误,如未找到数据库
NotSupportedError请求不支持的内容,如回滚

13.1.3连接和游标
函数connect的常用参数:

参数名描述(是否可选)
dsn数据源名称,具体含义随数据库而异 (否)
user用户名(是)
password用户密码(是)
host主机名(是)
database数据库名称(是)

函数connect返回的连接对象支持的方法:

方法名描述
close()关闭连接对象,关闭后连接对象及其游标将不可用
commit()在支持的情况下提交未提交的事务 ,否则什么也不做
rollback()回滚未提交的事物
cursor()返回连接的游标对象

游标:使用游标来执行SQL查询和查看结果。P235

13.1.4类型
P236

13.2 SQLite和PySQLite

SQLite:小的数据库引擎,不需要作为独立的服务器运行,且可以使用本地文件,不需要集中式数据库存储机制
PySQLite:在Python中的标准库的SQLite包装器,通过使用模块sqlite3实现。
13.2.1起步

import sqlite3
conn=splite3.connect('somedatabase.db')#创建连接到数据库的文件
curs=conn.cursor  #l连接获得的游标
conn,commit()
conn.close()

13.2.2数据库应用程序示例
#将数据导入数据

import sqlite3

def convert(value):
    if value.startswith('~'):
        return value.strip('~')
    if not value:
        value='0'
        return float(value)

conn=sqlite3.connect('food,db')
curs=conn.cursor()

curs.execute('''
CREATE TABLE food(

id TEXT PRIMARY KEY,
desc     TEXT,
water    FLOAT,
kcal     FLOAT,
protein  FLOAT,
fat      FLOAT,
ash      FLOAT,
carbs    FLOAT,
fiber    FLOAT,
suger    FLOAT,
)
''')
query='INSERT INTO food VALUES(?,?,?,?,?,?,?,?,?,?)'
field_count=10
for line in open ('ABBREV.txt'):
    fields=line.split('^')
    vals=[convert(f) for f in fields [:field_count]]
    curs.execute(query,vals)

conn.commit()
conn,close()

#食品数据库查询程序

import sqlite3,sys

conn=sqlite3.connect('food.db')
curs=conn.cursor()

query='SELECT * FROM food WHERE '+sys.argv[1]
print(query)
curs.execute(query)
names=[f[0] for f in curs.description]
for row in curs.fetchall():
    for pair in zip (name ,row):
        print('{}:{}'.format(*pair))
    print()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值