Stack Overflow 上的这个问题 提到得很好,
Query.get()
方法被认为是遗留的。从现在开始,我试图寻找正确的查询方式,我的问题是:我应该在我的 Flask 应用程序中使用这些方法中的哪一种?为什么?我应该继续使用 flask-sqlalchemy 框架,还是应该使用基本的 SQLalchemy?
所有这些行都是从
with app.app_context()
块运行的,它们都有相同的结果——它们返回一个用户对象:
user = User.query.get(1)
旧的做事方式(提到here)user = db.session.get(User, 1)
在OP中提到user = db.session.scalars(db.select(User).filter_by(id=1)).first()
提到hereuser = db.session.execute(db.select(User).filter_by(id=1)).scalars().first()
在flask-sqlalchemy 文档中提到user = db.get_or_404(User, 1)
也在那里提到。据我了解,flask-sqlalchemy 推荐方法 (4)。与 (1) 或 (2) 相比,新的解决方案需要如此丑陋、令人困惑且不可读的语法,这对我来说很奇怪。
所以经过更多的研究,我找到了以下答案:
SQLAlchemy
对象中。更多关于这里。这意味着,我不必导入 Column
、session
、select
等关键字;他们可以使用db = SQLAlchemy(app)
db.session
select()
现在是执行查询的方式.在实践中,我认为这是现在执行查询的方式;我把它写在这里是为了(我自己的)将来更容易参考。我还使用了 Flask-SQLAlchemy 的语法,使用前面描述的
db.
:
db.session.get(User, 1)
使用主键进行选择,User.query.get(1)
的继承者。返回User
对象。db.session.scalars(db.select(User).where(User.email == "[email protected]")).first()
使用其他列进行选择,继承User.query.filter_by(email="[email protected]").first()
。返回“用户”对象。db.session.scalars(db.select(User)).all()
获取所有用户,User.query.all()
的继承者。返回 list
的 User
个对象。