在Flask-sqlalchemy和Postgresql中使用JSON类型 - python

背景:我正在构建Flask应用程序,并且已将数据存储到PostgreSQL数据库中以及JSON列类型中。

任务:在我的视图函数中,我想通过{Key:Value}从JSON列中订购数据库查询

完成的:例如,通过使用以下命令,我已经在psql命令行中成功执行了此查询:

从目标中选择*,其中cast(product->>'salesrank'为整数)asc投射(product->>'profit'为浮点数)> 100订单;

问题:我无法在我的代码中复制此查询(请参见“额外信息”部分中的“模型”代码)

from app import app, db
from models import Target 

data = Target.query.order_by(Target.product['salesrank'])

收到错误-ProgrammingError:(ProgrammingError)无法识别json类型的排序运算符
第2行:根据目标ORDER BY target.product->'salesrank'
^
提示:使用显式排序运算符或修改查询。
'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目标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())

我在其中定义Flask和Sqlalchemy的App.py文件

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)

感谢您提供的任何帮助!

参考方案

查看the SQLAlchemy documentation for the JSON data type似乎应该可以使用.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))

在Flask sqlalchemy中订购一对多模型? - python

我正在尝试编写一个特定的查询,以允许用户优化其搜索。我与作者和书籍之间存在一对多的关系:class Author(Model): id = Column(Integer, primary_key=True) name = Column(String) books = relationship('Book', backref='a…

flask sqlalchemy-根据数据库中的列动态生成数据模型 - python

有没有一种方法可以根据Flask SQLAlchemy的数据库表中的列动态生成数据库模型?我有一个应用程序来显示数据库表中的数据,但是列名有时会更改并破坏我的应用程序。我希望有一种方法可以根据数据库中的实际列名动态​​生成数据模型。我目前明确声明所有列,如下所示。class MyDbModel(db.Model): __tablename__ = '…

python flask如何从URL获取路由ID - python

我正在用烧瓶。我有一个网址,例如:http://example.com/page/page_id我想知道如何从路线中的网址获取page_id部分。我希望我可以设计出一些方法,例如:@route('/page/page_id') def page(page_id): pageid = page_id 参考方案 这非常简单-在尖括号之间传递p…

Flask_SQLAlchemy无法像SQLAlchemy那样反映数据库 - python

我正在尝试使用python-Flask将Foreigner Database连接到Flask_SQLALchemy应用我到处都看过,包括FLASK_SQLALCHEMY official doc 过去4天里,我一直在Internet上到处寻找FLASK_SQLALCHEMY中没有ORM库的任何教程,但运气不佳我一直在查看SQLAlchemy Reflecti…

Flask Cors无法运作 - python

我正在尝试在Flask应用程序中启用CORS,但无论我把来源如何,似乎总是可以从浏览器访问URL。我不知道我做错了什么。这是我的代码from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r'/*&…