我正在使用SQLAlchemy ORM几天,我正在寻找一种方法来获取Session.query()的结果中的tablename前缀.
例如 :
myId = 4
...
data = session.query(Email.address).filter(Email.id==str(myId)).one()
print data.keys()
这将显示:
("address",)
我希望得到类似的东西:
("Email.address",)
有没有办法做到这一点,而无需更改类属性和表列名称.
这个例子有点虚拟,但在更一般的目的中,我想在结果中按表名称为所有列名添加前缀,以确保结果总是在相同的格式下,即使查询中有连接.
我已经阅读了有关别名()的内容,这里有很多帖子,但没有让我满意.
有人可以请教我这个吗?
谢谢.
编辑:
非常感谢您的回答@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'}]
最佳答案 尝试
column_descriptions:
query = session.query(Email.address)
print [str(column['expr']) for column in query.column_descriptions] # should print ["Email.address"]
data = query.filter(Email.id==str(myId)).one()
希望有所帮助.