获取PyOdbc中的表和列名称

17 投票
2 回答
48241 浏览
提问于 2025-04-17 17:13

我想从一个PyOdbc的游标中获取完整的列名。比如,我有两个简单的表:

  • Table_1(Id, < 其他字段 >)
  • Table_2(Id, < 其他字段 >)

我想获取连接后的数据:

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 *) - 如果必须的话我会这样做,但这对一个测试工具来说似乎有点过于复杂。

有没有更好的方法?任何建议都会很感激。

2 个回答

5

这是我怎么做的。

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。

28

PyOdbc 文档提供了什么

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

www.PyOdbc wiki 这个API文档很有用

撰写回答