1

我正在尝试通过使用 2 个过滤器来获取一行的 ID。我通过使用 1 个过滤器让它工作,但是一旦我添加了第二个,事情就出错了。有人可以帮忙吗(是的,我已经阅读了 sqlalchemy 教程,但仍然有问题)

我的桌子(部分)

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

我在表中创建了一个空行,只填写了 user_id。

现在这条线工作(1过滤器)

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

当我尝试添加第二个过滤器(仍然为空)时,它出错了。我收到以下错误:AttributeError:'Query' object has no atribute 'id'

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

请帮助我或指出正确的方向

4

1 回答 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
于 2013-03-05T16:44:06.327 回答