gpt4 book ai didi

python - SQL炼金术 : is there any good automated way to rename columns

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:02 25 4
gpt4 key购买 nike

我使用 SQLAlchemy ORM 几天了,我正在寻找一种方法来在 Session.query() 的结果中获取表名前缀。

例如:

myId = 4
...
data = session.query(Email.address).filter(Email.id==str(myId)).one()

print data.keys()

这将显示:

("address",)

我想得到类似的东西:

("Email.address",)

有没有办法做到这一点,而不改变类属性和表列名。这个例子有点虚,但在更一般的目的中,我想在结果中用表名作为所有列名的前缀,以确保结果始终采用相同的格式,即使有 joins查询。我读过关于 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'}]

最佳答案

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

希望对您有所帮助。

关于python - SQL炼金术 : is there any good automated way to rename columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16645834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com