我不认为 sqlite 会“矫枉过正”——它自 2.5 以来就带有标准 Python,因此无需安装任何东西,它可以在内存或本地磁盘文件中创建和处理数据库。真的,怎么可能更简单……?如果您想要内存中的所有内容,包括初始值,并且想要使用 dicts 来表达这些初始值,例如...:
import sqlite3
db = sqlite3.connect(':memory:')
db.execute('Create table Users (Name, Location, Type)')
db.executemany('Insert into Users values(:Name, :Location, :Type)', [
dict(Name="Mr. Foo", Location="Boston", Type="Secondary"),
dict(Name="Mr. Bar", Location="New York", Type="Primary"),
dict(Name="Mr. Quux", Location="Chicago", Type="Secondary"),
])
db.commit()
db.row_factory = sqlite3.Row
现在你的内存中的小“db”已经准备好了。当然,在磁盘文件中创建数据库和/或从文本文件、CSV 等读取初始值并不难。
查询特别灵活、简单、甜美,例如,你可以随意混合字符串插入和参数替换......:
def where(w, *a):
c = db.cursor()
c.execute('Select * From Users where %s' % w, *a)
return c.fetchall()
print [r["Name"] for r in where('Type="Secondary"')]
发出[u'Mr. Foo', u'Mr. Quux']
,就像更优雅但等效的一样
print [r["Name"] for r in where('Type=?', ["Secondary"])]
你想要的查询只是:
print [r["Name"] for r in where('Location="Boston" or Type="Primary"')]
等等。说真的——有什么不喜欢的?