DB API 2.0人类版
sql的Python项目详细描述
为什么?
DB API 2.0工作。orms很方便,但有时会过度杀戮。sql是 轻量级包装器位于提供 postgres类似的接口,使得使用sql结果非常方便。
怎么做?
>>> import sqlite3 >>> connection = sqlite3.connect(':memory:')
>>> import sql >>> bliss = sql.SQL(connection)
运行
run是要运行查询但不关心 结果,例如创建表格:
>>> bliss.run("CREATE TABLE contributors (firstname VARCHAR, lastname VARCHAR)") >>> bliss.run("INSERT INTO contributors VALUES (?, ?)", [('Andrew', 'Kuchling'), ... ('James', 'Henstridge'), ... ('Daniele', 'Varrazzo'), ... ('Marc-Andre', 'Lemburg')])
到目前为止,创建一个游标并调用executemany并没有什么了不起的成就 同样的结果。
一个
one是当您知道结果是一行或只关心结果时使用的方法 大约一个。
>>> bliss.one("SELECT firstname FROM contributors WHERE lastname='Lemburg'") # doctest: +SKIP u'Marc-Andre'
弦,除了在我的书中跳动的弦之外,什么都没有:
>>> cursor = connection.cursor() >>> cursor.execute("SELECT firstname FROM contributors WHERE lastname='Lemburg'") # doctest: +ELLIPSIS <sqlite3.Cursor object at ...> >>> cursor.fetchone() # doctest: +SKIP (u'Marc-Andre',)
更好的是,如果结果包含多个列,则返回一个namedtuple:
>>> bliss.one("SELECT * FROM contributors WHERE firstname='James'") # doctest: +SKIP Record(firstname=u'James', lastname=u'Henstridge')
全部
all是用于从查询中检索所有行的方法。
>>> bliss.all("SELECT firstname FROM contributors") #doctest: +SKIP [u'Andrew', u'James', u'Daniele', u'Marc-Andre']
它会在适当的时候返回一个名为duples的列表:
>>> bliss.all("SELECT firstname, LENGTH(lastname) AS length FROM contributors") # doctest: +NORMALIZE_WHITESPACE +SKIP [Record(firstname=u'Andrew', length=8), Record(firstname=u'James', length=10), Record(firstname=u'Daniele', length=8), Record(firstname=u'Marc-Andre', length=7)]