在 PyOdbc 中获取表名和列名

新手上路,请多包涵

我想从 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.Idt2.Id

我想到的一些解决方案(以及为什么我真的不想实施它们):

  1. 重命名查询中的列 - 在我的真实用例中有几十个表,有些表有几十行更改太频繁
  2. 解析我的查询并自动生成我的 SQL 查询(基本上检查表的查询,使用 cursor.tables 函数获取列,然后将 select * 替换为一组命名列) - 如果我也有我会这样做,但这对于测试工具来说似乎有点矫枉过正

有没有更好的办法?任何意见,将不胜感激。

原文由 Brad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

如果不编写大量代码来包装它,似乎不可能做我想做的事。其他答案都没有真正回答以某种相对自动的方式通过它们源自的表返回不同列名的问题。

原文由 Brad 发布,翻译遵循 CC BY-SA 3.0 许可协议

PyOdbc 文档提供

# columns in table x
for row in cursor.columns(table='x'):
    print(row.column_name)

www.PyOdbc wiki API 文档很有用

原文由 Geordie Jon 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题