wee*_*sss 6 postgresql json flask python-2.7 flask-sqlalchemy
我正在使用带有JSON字段类型的Flask,SQLAlchemy和postgresql.我在使用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
Run Code Online (Sandbox Code Playgroud)
这是我提交给数据库的数据集的示例
{
"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
}
Run Code Online (Sandbox Code Playgroud)
我有问题查询 - 尝试从定义如此的路线中找到"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
Run Code Online (Sandbox Code Playgroud)
从psql它将是这样的:
select * from "workQueue" t, json_array_elements(t.field_data->'files') as files WHERE CAST(files->>'file_id' AS INTEGER) = 1;
Run Code Online (Sandbox Code Playgroud)
似乎无法在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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |