2017-06-06 77 views
1

鍵存在我有一個模型DefinitionSQLAlchemy的Postgres的查詢是JSON

class Definition: 
    meta = Column(MutableDict.as_mutable(JSON)) 

它存儲任何JSON,所以我想查詢一個給定的關鍵在這一領域的存在。

我需要這樣的東西:

defs = db.query(Definition).filter(
    Definition.meta.has_key('translation')).all() 

MySQL的例子有一個名爲json_contains功能,我可以使用它:

defs = db.query(Definition).filter(
    func.json_contains(
     Definition.meta, 'translation') == 1).all() 

我怎樣才能在PostgreSQL的

+0

您使用'psycopg2'? – jmunsch

+0

是的,使用psycopg2 – PepperoniPizza

回答

1

達到這個每當我我不確定如何使用sqlalchemy位,我一起下了一個版本,然後從那裏開始:

json_select = '''SELECT jdoc->'key_name1', jdoc->'translation' 
FROM Definition 
WHERE jdoc @> '{"translation": 1, "key_name1": "hello there"}' 
; 
''' 

print([x for x in db.engine.execute(json_select)]) 

注:

psycopg2在2.5.4版本改變:增加jsonb支持。

參考: