我需要从
gdbm
到
postgresql
我的钥匙/价值商店。
看来我得换个
import dbm.gnu
def get_value(db, key):
return json.loads(db[key])
db = dbm.gnu.open(...)
v = get_value(db, "foo")
具有
import sqlalchemy
from sqlalchemy import Column, Text
from sqlalchemy.dialects.postgresql import JSONB
db = sqlalchemy.create_engine("...")
engine = db.connect()
meta = sqlalchemy.MetaData(engine)
id_col = Column('id', Text, primary_key=True)
data_col = Column('data', JSONB)
sqlalchemy.Table("my_table", meta, id_col, data_col)
meta.create_all()
# populate the table with 40M "id"-->JSON records
engine.execute(
my_table.update(),
id="foo",
data={"a":3, "b":17, "c":[2,6,0]})
my_table = sqlalchemy.table("my_table", id_col, data_col)
def get_value(db, key):
res = engine.execute(db.select().where(db.c.id == key)).fetchall()
assert len(res) == 1
return res[0][1]
v = get_value(my_table)
这看起来有点吓人(特别是如果我加上
echo
看看所有的sql
为这些简单的键值操作生成)。
有更好的办法吗?
另外,我也可以用
psycopg
而不是
sqlalchemy
直接,但那会让我编写sql
我自己
;。-(