2016-09-22 62 views
0

我试图找到最好的方式来生成一个sql查询,从我的数据库从jsonb列中的特定字段。我想产生这样的查询:sqlalchemy - 我如何生成一个查询,只返回一个字段从jsonb列

select images->'main' from scenes where id = 1; 

我发现使用with_entities this参考,而这个正确生成查询:

>>> x = Scene.query.with_entities(Scene.images['main']).first()                                           
2016-09-22 18:57:01,825 INFO sqlalchemy.engine.base.Engine SELECT scenes.images -> %(images_1)s AS anon_1                                
FROM scenes                                                        
LIMIT %(param_1)s                                                      
2016-09-22 18:57:01,826 INFO sqlalchemy.engine.base.Engine {'param_1': 1, 'images_1': 'main'}                   

然而,它的返回结果作为一个元组,而不是模型对象:

>>> x                                                         
([{u'url': u'foo.jpg', u'priority': 1}],)   

我认为使用load_only,但这个API似乎并未有指定合作的jsonb领域的一种方式lumn,但只有整个列名称。

有没有办法生成查询并将模型对象作为返回值?

+0

那么,如果它返回一个模型对象,你期望你的领域在哪里? t对象? – univerio

回答

0

假设Scene是一个ORM类,可以使用Session.query()要么返回值作为一个元组

x = session.query(Scene.images['main']).filter_by(id=1).one() 
print x 
SELECT images->'main' FROM scenes WHERE id = 1; 

或模型对象(的Scene实例)

scene = session.query(Scene).filter_by(id=1).one() 
print scene.images['main'] 
SELECT * FROM scenes WHERE id = 1;