私はsqliteが "過剰な"ものになるとは思わない - 標準のPython 2.5以降では、インストールする必要がなく、メモリやローカルディスクファイルのデータベースを作成して扱うことができる。本当に、どうすれば簡単にできますか?あなたは初期値を含むメモリ内のすべてのものをしたい、そしてそれらの初期値を表現するために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」は行く準備ができて。ディスクファイルに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"')]
などSエイリアス - 好きではないことは何ですか?
ありがとうございました、私は以前に組み込みセットを使ったことはありません。これは、コード内で何が起こっているのかを少なくとも明白にするはずです。 – akoumjian