我试图找到生成sql查询的最佳方法,该查询从我的数据库中的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字段,只能指定整个列名。
有没有办法生成查询并将模型对象作为返回值?
答案 0 :(得分: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;
答案 1 :(得分:0)
x = db.session.query(Scene.images['main'].label('main_image')).first()
print(x.main_image)