我需要通过类似于
的id
查询SQLAlchemy数据库
User.query.filter_by(用户名= '彼得')
但是对于id。我该怎么做呢? [搜索Google和SO没有帮助]
答案 0 :(得分:84)
查询的get function支持按ID查询。
例如,要查询ID为23的对象:User.query.get(23)
答案 1 :(得分:32)
您可以像这样
查询id = 1的用户 session.query(User).get(1)
答案 2 :(得分:3)
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',)
答案 3 :(得分:1)
如果使用tables reflection
,则可能会给定的解决方案出现问题。
(这里的先前解决方案对我不起作用)。
我最终使用的是:
session.query(object._class_).get(id)
({object
是通过反射从数据库中检索到的,这就是为什么您需要使用.__class__
)
我希望这会有所帮助。
答案 4 :(得分:0)
首先,应将id
设置为主键。
然后,您可以使用query.get()
方法通过id
(已经是主键)查询对象。
由于使用query.get()
方法通过主键查询对象。
从Flask-SQLAlchemy documentation
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)