如何使用SqlAlchemy通过id查询数据库?

时间:2011-07-19 15:43:42

标签: python sql model sqlalchemy

我需要通过类似于

id查询SQLAlchemy数据库
  

User.query.filter_by(用户名= '彼得')

但是对于id。我该怎么做呢? [搜索Google和SO没有帮助]

5 个答案:

答案 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)