![](/img/trans.png)
[英]How to deserialise SQLAlchemy JSON to Decimal using Flask-SQLAlchemy
[英]Using JSON Type with Flask-sqlalchemy & Postgresql
背景:我正在構建一個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'])
收到錯誤 - 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())
我的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)
感謝您提供任何幫助!
查看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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.