在PyOdbc中获取表和列名称

时间:2013-02-26 20:35:28

标签: python pyodbc

我想从PyOdbc Cursor中检索完全引用的列名。例如,假设我有两个简单的表:

  • 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 *) - 如果我有我也会这样做,但对于测试工具来说似乎有点过分了
  3. 有更好的方法吗?任何建议将不胜感激。

3 个答案:

答案 0 :(得分:12)

PyOdbc 文档提供

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

www.PyOdbc wiki API文档很有用

答案 1 :(得分:0)

我是这样做的。

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

答案 2 :(得分:-3)

似乎没有可能做我想做的事情而没有编写相当数量的代码来包装它。其他答案中没有一个实际回答了以相对自动的方式从表中返回不同列名的问题。