4
我使用SQLAlchemy ORM幾天,我正在尋找一種方法來獲得Session.query()
的結果中的表名前綴。SQLAlchemy:有什麼好的自動化方法來重新命名列
例如:
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'[email protected]', 'User.name': u'John'}]