Я использую 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()
, здесь много сообщений, но меня ничто не удовлетворило. Может кто-нибудь, пожалуйста, просветить меня на этом?
спасибо.
EDIT:
Большое спасибо за ваш ответ @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'}]