首页 > 代码库 > python常用库
python常用库
Sqlite3
- 创建一个Connection对象用于表示一个db,代码如下:
import sqlite3conn = sqlite3.connect(‘example.db‘)#如果要在RAM中创建db,可以使用特定名字:memory:
当有多个connection同时访问db并且有一个进程在修改db时,db一直是被lock的,直到transaction被提交,connect()的常用参数:- timeout参数指定连接等待多久然后抛出异常,默认是5秒.
- isolation_level:设置如何开启tranction,默认遇到DML语句时打开transaction,遇到non-DML语句时提交transaction
- cached_statements:本次connection可以在缓存中存放的语句数,默认为100
- uri:boolean型,使用uri指定db,可以指定连接的option,如以只读方式打开db
db = sqlite3.connect(‘file:path/to/database?mode=ro‘, uri=True)
- 创建一个Cursor对象用于执行sql命令,要注意sql语句的安全,另外对于execute,executemany和executescript函数可以直接使用Connection对象调用,函数内会自动创建cursor,并返回cursor对象
c=conn.cursor()# Never do this -- insecure! symbol = ‘RHAT‘ c.execute("SELECT * FROM stocks WHERE symbol = ‘%s‘" % symbol) # Do this instead,注意元组中只有一个元素时后面要有逗号#sql语句中的替换符为? t = (‘RHAT‘,) c.execute(‘SELECT * FROM stocks WHERE symbol=?‘, t) print(c.fetchone()) # Larger example that inserts many records at a time purchases = [(‘2006-03-28‘, ‘BUY‘, ‘IBM‘, 1000, 45.00), (‘2006-04-05‘, ‘BUY‘, ‘MSFT‘, 1000, 72.00), (‘2006-04-06‘, ‘SELL‘, ‘IBM‘, 500, 53.00), ] c.executemany(‘INSERT INTO stocks VALUES (?,?,?,?,?)‘, purchases)
- 如果使用execute执行完查询语句后,获取数据可以使用如下方法:
- 将cursor当做一个iterator,使用for语句每次获取一行row数据
- 使用fetchone(),每次获取一行row数据,最后返回None
- 使用fetchall(),获取row的list,没有数据则返回None
- 将sqlite不支持的python类型加到sqlite中,首先要将该类型转换成sqlite支持的类型,通常用str。具体方法有两种:
- 实现类的__conform__方法
__conform__
- 使用sqlite3.register_adapter为类注册一个adapter方法,将类型转换成str,sqlite3 module内部为python的内置类型datetime.date和datetime.datetime提供了adapter,将它们转换为iso。
adapter
还可以使用sqlite3.register_converter为类注册一个convert方法,将数据库中的值转换为python类型。为了使sqlite3知道从数据库中查询出的数据的实际类型需要设置sqlite.connect方法的detect_types参数,值有两个:- 通过declared type(隐式方法)
- 通过列名(显示方法)
detect_type
- 实现类的__conform__方法
- class sqlite3.Row:表示一行数据,可以使用列名或者索引下标访问某列的值
python常用库
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。