通过过滤器在SQLalchemy中检索行的ID

1 投票
1 回答
996 浏览
提问于 2025-04-17 18:01

我正在尝试通过使用两个过滤条件来获取一行的ID。使用一个过滤条件时可以正常工作,但一旦我添加第二个过滤条件,就出现问题了。有人能帮我一下吗?(是的,我看过sqlalchemy的教程,但还是遇到了问题)

这是我表格的一部分

class Character(Base):
    __tablename__ = 'character'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    lock = Column(Boolean)

我在表格中创建了一行空数据,只有user_id被填上了。

现在这一行可以正常工作(使用一个过滤条件)

u_id = 1
x_char = session.query(Character).filter_by(user_id=u_id).first()
y = x_char.id
print y

当我尝试添加第二个过滤条件(这个条件仍然是空的)时,就出错了。我收到以下错误信息:AttributeError: 'Query'对象没有'id'这个属性

x_char = session.query(Character).filter(and_(Character.user_id == u_id, Character.lock == None))
y = x_char.id
print y

请帮我一下,或者给我指个方向

1 个回答

0

你忘记调用 .first() 了,所以你的查询根本没有被执行:

x_char = session.query(Character).filter(and_(Character.user_id == u_id, Character.lock == None))
x_char = x_char.first()

如果这个查询没有返回任何结果,x_char 就会是 None。要想搞清楚 为什么 查询没有返回任何东西,你可以打印出生成的 SQL 语句,这样可以帮助你理解 SQLAlchemy 发送给数据库的内容:

x_char = session.query(Character).filter(and_(Character.user_id == u_id, Character.lock == None))
print x_char

撰写回答