我正在使用带有
JSON字段类型的Flask,sqlAlchemy和postgresql.
我在使用sqlAlchemy查询数据时遇到问题
我在使用sqlAlchemy查询数据时遇到问题
这是我的模型示例:
class WorkQueue(db.Model): __tablename__ = "workQueue" id = db.Column(db.Integer,primary_key=True) field_data = db.Column(JSON) def __init__(self,field_data = None): self.field_data = field_data
这是我提交给数据库的数据集的示例
{ "files": [ { "added": 1470248644.093014,"totalbytes": 1109630458,"filename": "/home/me/project/static/uploads/file.ext","finished": false,"basefilename": "file.ext","file_id": 21,"numsegments": 2792 } ],"numfiles": 1,"success": true }
我有问题查询 – 尝试从定义如此的路线中找到“WorkQueue [‘files’] [0] [‘file_id’]”:
@page.route('/remove/<int:id>',methods=['GET','POST']) def file_remove(id): to_remove = id # here is where I would query and delete,but I can't get this right
从psql它将是这样的:
select * from "workQueue" t,json_array_elements(t.field_data->'files') as files WHERE CAST(files->>'file_id' AS INTEGER) = 1;
似乎无法在sqlAlchemy中复制它
解决方法
这样的事情
from sqlalchemy import func,Integer files_subquery = session.query(func.json_array_elements(WorkQueue.field_data['files']).label('files')) \ .subquery() query = session.query(WorkQueue.id,WorkQueue.field_data,files_subquery.c.files) \ .filter(files_subquery.c.files.op('->>')('file_id').cast(Integer) == 1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。