lar*_*ray 26 python postgresql json flask flask-sqlalchemy
背景: 我正在构建一个Flask应用程序,我已将数据存储到postgresql数据库和JSON列类型中.
任务: 在我的视图函数中,我想从JSON列的{Key:Value}订购数据库查询
完成:我已成功通过使用以下命令在psql命令行执行此查询,例如:
select*from target where cast(product - >>'profit'as float)> 100 order by cast(product - >>'salesrank'as integer)asc;
问题:我无法在我的代码中复制此查询(请参阅下面的额外信息部分中的模型代码)
from app import app, db
from models import Target
data = Target.query.order_by(Target.product['salesrank'])
Run Code Online (Sandbox Code Playgroud)
收到错误 - ProgrammingError:(ProgrammingError)无法识别类型json的排序运算符LINE 2:FROM target ORDER BY target.product - >'salesrank'^ HINT:使用显式排序运算符或修改查询.'SELECT target.id AS target_id,target.store AS target_store,target.product AS target_product,target.asin AS target_asin,target.date AS target_date \nFROM target ORDER BY target.product - >%(product_1)s \n LIMIT% (param_1)s'{'product_1':'salesrank','param_1':1}
额外信息 我的目标模型设置如下:
#models.py
from app import db
from sqlalchemy.dialects.postgresql import JSON
import datetime
class Target(db.Model):
__tablename__ = 'target'
id = db.Column(db.Integer)
store = db.Column(db.String())
product = db.Column(JSON)
asin = db.Column(db.String(), primary_key=True)
date = db.Column(db.DateTime, default=datetime.datetime.utcnow())
Run Code Online (Sandbox Code Playgroud)
我的App.py文件,我定义了Flask和Sqlalchemy
from flask import Flask
import os
from flask.ext.sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
db = SQLAlchemy(app)
Bootstrap(app)
import views
from app import app
from models import Result
if __name__ == '__main__':
app.run(host='192.168.1.5', port=5000, debug=True)
Run Code Online (Sandbox Code Playgroud)
感谢您提供任何帮助!
Sea*_*ira 21
查看SQLAchemy文档中的JSON数据类型,看起来您应该能够使用该.cast方法:
from sqlalchemy.types import Integer
from app import app, db
from models import Target
# SQLAlchemy 1.1+
data = Target.query.order_by(Target.product['salesrank'].astext.cast(Integer))
# SQLAlchemy < 1
data = Target.query.order_by(Target.product['salesrank'].cast(Integer))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24638 次 |
| 最近记录: |