session.execute从未返回一个字典,它返回一个RowProxy对象,可以使用用于位置查找任一整数密钥被索引像一个字典,字符串键用于标签基于查找向上或Column对象来查找值该列。这里的问题是session.execute(query)
没有达到你期望的效果。它将Query对象转换为Select语句,执行该语句并直接返回结果。结果集不知道任何有关ORM级别功能的信息。 0.5和0.6之间的变化是ORM使用不同的算法来标记查询中的列,现在它将表名称预先标记为标签。所以当以前row['id']
碰巧工作,现在row['users_id']
工作。在这两种情况下row[User.__table__.columns['id']]
的作品。
要执行ORM查询,您应该实际使用.all()
,.first()
和.one()
方法或对其进行迭代或使用数字索引。查询返回指定的元组对象。如果你想要一个字典,用它的键将元组压缩:
row = session.query(User.id, User.username, User.email)\
.filter(and_(User.id == id, User.username == username)).first()
print("id=%s username=%s email=%s" % row) # positional
print(row.id, row.username) # by label
print(dict(zip(row.keys(), row))) # as a dict
只是好奇:为什么不'''' 。或'session.query(User).filter(User.id == id).filter(User.username == username).first()'如果id不是主键。做到这一点,您将获得一个User实例,并且您可以通过属性查找来访问字段值。 – codeape 2010-05-14 05:25:13