Если вы предпочитаете писать обычные операторы SQL, то почему бы не использовать SQLAlchemy для этого.Не требуется, чтобы вы использовали цепочечные методы, такие как join
, filter_by
и т. Д. Для запросов к вашей базе данных.
Чтобы ответить на этот вопрос, мне нужно сделать некоторые предположения о том, что в вашем models
файл.Я предполагаю, что это что-то вроде этого:
from flask_sqlalchemy import SQLAlchemy
import datetime
db = SQLAlchemy()
class BaseModel(db.Model):
"""Base data model for all objects"""
# more code here
class x(BaseModel, db.Model):
# more table setup code here
class y(BaseModel, db.Model):
# more table setup code here
Если это так, то вот что вы можете сделать, чтобы выполнить простые старые параметризованные операторы SQL: *
from flask import Flask
from models import db
import json
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_connection_string'
db.init_app(app)
result = db.session.execute("select * from x inner join y on x.name = :name", {"name":"xyz"})
# If no rows were returned in the result, return an empty list
if result.returns_rows == False:
response = []
# Convert the response to a plain list of dicts
else:
response = [dict(row.items()) for row in result]
# Output the query result as JSON
print(json.dumps(response))
Я нахожу этометод выполнения SQL-запросов во Flash с помощью SQLAlchemy гораздо проще понять и понять, чем пытаться использовать все различные цепочки методов, которые вы пытались использовать в исходном сообщении.