4

我正在使用 SQLAlchemy ORM 几天,我正在寻找一种方法来在Session.query().

例如 :

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

1 回答 1

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()

希望有帮助。

于 2013-05-20T10:30:28.980 回答