15

我想从 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 *一组命名列替换) - 如果我也有,我会这样做,但是对于测试工具来说,这似乎有点矫枉过正

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

4

3 回答 3

22

PyOdbc文档提供

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

www.PyOdbc wiki API 文档很有用

于 2013-05-02T00:21:17.940 回答
3

这是我的做法。

import pyodbc
connection = pyodbc.connect('DSN=vertica_standby', UID='my_user', PWD='my_password', ansi=True)
cursor = connection.cursor()
for row in cursor.columns(table='table_name_in_your_database'):
    print(row.column_name)

您必须通过两个文件设置您的 DSN(数据源名称)。odbc.ini 和 odbcinst.ini

于 2017-09-16T00:04:52.293 回答
-4

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

于 2015-02-15T15:28:53.790 回答