【发布时间】:2013-02-26 20:35:28
【问题描述】:
我想从 PyOdbc 游标中检索完全引用的列名。例如,假设我有 2 个简单的表:
Table_1(Id, < some other fields >)Table_2(Id, < some other fields >)
我想检索连接的数据
select * from Table_1 t1, Table2 t2 where t1.Id = t2.Id
使用pyodbc,像这样:
query = 'select * from Table_1 t1, Table2 t2 where t1.Id = t2.Id'
import pyodbc
conn_string = '<removed>'
connection = pyodbc.connect(conn_string)
cursor = connection.cursor()cursor.execute(query)
然后我想获取列名:
for row in cursor.description:
print row[0]
但是如果我这样做,我会得到两次我不想要的Id。理想情况下,我可以在输出中得到t1.Id 和t2.Id。
我想到的一些解决方案(以及为什么我真的不想实施它们):
- 重命名查询中的列 - 在我的实际用例中,有几十个表,其中一些有几十行更改过于频繁
- 解析我的查询并自动生成我的 SQL 查询(基本上检查表的查询,使用 cursor.tables 函数获取列,然后用一组命名列替换
select *) - 如果我也有我会这样做,但对于测试工具来说,这似乎有点矫枉过正
有没有更好的方法?任何建议将不胜感激。
【问题讨论】:
-
您希望获得前缀列名时遇到了一些麻烦 - 它们实际上在您阅读这些查询结果的任何时候都不存在,并且您永远无法通过您建议的标识符访问这些值(例如,
t1.Id在我知道的任何平台下都不是 SQL 中输出列的名称)。 7 年多后,我建议重新评估这是否真的是您想要的,或者您是否可以通过将每列别名为t1_id之类的东西来简化这一点,并以表别名为前缀。