我正在使用SQLAlchemy ORM几天,我正在寻找一种在Session.query()
的结果中获取tablename前缀的方法。
例如:
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'}]
答案 0 :(得分:2)
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()
希望有所帮助。