我正在使用 SQLAlchemy ORM 几天,我正在寻找一种方法来在Session.query()
.
例如 :
myId = 4
...
data = session.query(Email.address).filter(Email.id==str(myId)).one()
print data.keys()
这将显示:
("address",)
我想得到类似的东西:
("Email.address",)
有没有办法做到这一点,而不改变类属性和表列名。这个例子有点虚,但在更一般的目的中,我想在结果中用表名作为所有列名的前缀,以确保结果始终采用相同的格式,即使查询中有连接。我读过关于 的东西aliased()
,这里有很多帖子,但没有什么让我满意。有人可以请教我吗?
谢谢你。
编辑:
非常感谢您的回答@alecxe。我终于设法做我想做的事。这是我的第一批代码,可能还有很多需要改进的地方:
query = self.session.query(Email.address,User.name)
cols = [{str(column['name']):str(column['expr'])} for column in query.column_descriptions]
someone = query.filter(User.name==str(curName)).all()
r = []
for res in someone :
p = {}
for c in map(str,res.__dict__):
if not c.startswith('_'):
for k in cols:
if c == k.keys()[0]:
p[k[c]] = res.__dict__[c]
r.append(p)
print r
输出是:
[{'Email.address': u'john@foobaz.com', 'User.name': u'John'}]