我正在使用 Flask=1.1.2、Flask-SQLAlchemy=2.4.4 e SQLAlchemy-serializer=1.3.4.4
您必须使用 SQLAlchemy 中的 text。
models.py:
from sqlalchemy_serializer import SerializerMixin
from app import db
class Planet(db.Model, SerializerMixin):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String, nullable=False)
rotation_period = db.Column(db.String, nullable=True)
orbital_period = db.Column(db.String, nullable=True)
diameter = db.Column(db.String, nullable=True)
climate = db.Column(db.String, nullable=True)
gravity = db.Column(db.String, nullable=True)
terrain = db.Column(db.String, nullable=True)
surface_water = db.Column(db.String, nullable=True)
population = db.Column(db.Integer, nullable=True)
controllers.py
from sqlalchemy.sql import text
from app.planet.models import Planet
class ApiResource(Resource):
@bp.route('/api/planets/')
def get(self):
""" Returns a list of planets """
rows = Planet.query.order_by(Planet.name).all()
# filters
climate = request.args.get('climate', None)
name = request.args.get('name', None)
sort = request.args.get('sort', None)
filters = None
if climate:
filters = "climate='" + climate + "'"
if name:
if filters:
filters += " AND "
filters += "name='" + name + "'"
if filters:
rows = Planet.query.filter(text(filters))
if sort:
rows = rows.order_by(text(sort))
planets = list()
for row in rows:
planets.append(row.to_dict())
return planets
我使用这个包 sqlalchemy_serializer 将查询结果序列化为 json。