2013-05-20 2 views
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(), здесь много сообщений, но меня ничто не удовлетворило. Может кто-нибудь, пожалуйста, просветить меня на этом?

спасибо.


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'}] 

ответ

2

Дайте попробовать на 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() 

Надежда, что помогает.

Смежные вопросы