我需要按其查询SQLAlchemy数据库 id
类似于以下内容
User.query.filter_by(username ='peter')
但为身份证。我该怎么做呢?[通过Google和SO搜索没有帮助]
Answers:
查询具有一个get函数,该函数支持通过表的主键进行查询,我认为id
是这样。
例如,要查询ID为23的对象:
User.query.get(23)
注意:正如其他一些评论者和答案所述,这不仅仅是“对主键执行查询过滤”的简写。根据SQLAlchemy会话的状态,运行此代码可能会查询数据库并返回一个新实例,或者它可能会返回在代码中较早查询的对象的实例,而无需实际查询数据库。如果您尚未这样做,请考虑阅读SQLAlchemy会话上的文档以了解后果。
YourModel.query.get((pk1, pk2))
。注意元组。
您可以像这样查询ID = 1的用户
session.query(User).get(1)
有时get()并非您所期望的:
如果您的交易已完成:
>>> session.query(User).get(1)
[SQL]: BEGIN (implicit)
[SQL]: SELECT user.id AS user_id, user.name AS user_name, user.fullname AS user_fullname
FROM user
WHERE user.id = ?
[SQL]: (1,)
<User(u'ed', u'Ed Jones')>
如果您正在进行事务处理(get()将在不查询数据库的情况下为您提供结果对象在内存中):
>>> session.query(User).get(1)
<User(u'ed', u'Ed Jones')>
最好使用这个:
>>> session.query(User.name).filter(User.id == 1).first()
[SQL]: SELECT user.name AS user_name
FROM user
WHERE user.id = ?
LIMIT ? OFFSET ?
[SQL]: (1, 1, 0)
(u'Edwardo',)
get()
似乎可以在内存中为您提供结果对象(实际上不查询数据库),但是filter().first()
它将始终查询数据库。
get
由于效率的提高,使用会更好。
get
是更有效的。
首先,应将其设置id
为主键。
然后您可以使用该query.get()
方法来查询对象id
已经是主键的对象。
由于该query.get()
方法通过主键查询对象。
从Flask-SQLAlchemy文档推断
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
def test():
id = 1
user = User.query.get(id)