2013-03-05 57 views
1

我想通过使用2个过滤器来获取行的id。 我通过使用1个过滤器得到它的工作,但只要我添加第二个,就会出错。是否有人可以帮助(是的,我已经阅读了SQLAlchemy的教程,但还是有问题)SQLalchemy通过过滤器检索行的ID

我的表(的一部分)

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的:“查询”对象有没有属性附加伤害“身份证”

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

请帮我或点我在正确的方向

回答

0

你忘了打电话给.first(),让你查询未执行

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

如果该查询不返回任何东西,x_charNone。要调试为什么查询不返回任何东西,你可以打印生成的SQL,以帮助您了解什么是SQLAlchemy的发送到数据库:

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

我仍然得到同样的错误 – 2013-03-05 17:06:08

+0

@HansdeJong:我非常怀疑。 '.first()'不会*返回一个Query对象,所以这个错误对于返回的对象类型至少是不同的。 – 2013-03-05 17:07:13

+0

@HansdeJong:你看到的错误信息是什么,如果它与'Query'对象上的'id'完全相同'AttributeError',你没有正确应用'.first()'调用。如果不同,请分享该错误。 – 2013-03-05 17:20:58