我需要通过 SQLAlchemy 数据库的 id
进行查询,类似于:
User.query.filter_by(username='peter')
但是针对id,我该怎么做呢?[在Google和SO上搜索都没有帮助]
我需要通过 SQLAlchemy 数据库的 id
进行查询,类似于:
User.query.filter_by(username='peter')
但是针对id,我该怎么做呢?[在Google和SO上搜索都没有帮助]
查询有一个获取函数,支持按表的主键进行查询,我假设它是id
。
例如,要查询ID为23的对象:
User.query.get(23)
YourModel.query.get((pk1, pk2))
。注意这是一个元组。 - marc_aragonesget()
函数通过主键查询对象。如果您想通过“id”查询,您应该首先将“id”设置为主键。 - user10875014session.get(User, 5)
吗? - jave.webUser.query.filter(User.id.in_((23,24,25,58,21))).all()
应该可以满足您的需求。 - ggorlenQuery.get()
方法和此问题中列出的User.query.get(23)
方法有什么不同?https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.get
我想避免使用被弃用的方法,但我还没有弄清楚是否应该使用User.query.get(23)
。谢谢您的时间。 - Zhao Li要查询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()
总是会查询数据库。 - panda912get
更好,因为它可以提高效率。 - Solomon Uckoget
更有效率。 - panda912session.query(object.__class__).get(id)
(object
是通过反射机制从数据库中检索出来的,这就是为什么你需要使用.__class__
)
希望这可以帮到你。
从SQLAlchemy 2.0开始,您可以使用:
with Session(engine) as session:
user = session.get(User, 1)
if user is not None:
print(f'# user: {user.username}')
print(user)
首先,您应该将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)