SQLAlchem​​y的回报元组没有字典

我已经更新SQLAlchem​​y的0.6,但它打破了一切。 我注意到它返回元组没有一本字典了。 下面是一个示例查询:

query = session.query(User.id, User.username, User.email).filter(and_(User.id == id, User.username == username)).limit(1) result = session.execute(query).fetchone()

这段代码用于返回词典0.5。

我的问题是我怎么可以返回一个字典?

--------------解决方案-------------

这应该工作: dict(zip(['id','username','email'],result))或者你可以使用一本字典的理解,如果你对Python的3.X)。
此外,你不需要调用session.executesession.query对象。 您将要使用的.one()方法就可以了吧。 这也避免了需要的.limit(1)电话挂了您的查询的末尾。

session.execute从未返回一个字典,它返回一个RowProxy对象,可以使用任意的位置查找整数键被索引一个字典,根据标签查找或Column对象的字符串键查找该列的值。 这里的问题是session.execute(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

你确定这是不是一个ResultProxy它伪装成一个元组在打印时? 在ORM许多对象都不是他们的__str__函数返回。

分类:蟒蛇 时间:2015-03-15 人气:0
本文关键词: 蟒蛇,SQLAlchem​​y的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.745 (s). 10 q(s)