在PyOdbc中获取表和列名称

Bra*_*rad 11 python pyodbc

我想从PyOdbc Cursor中检索完全引用的列名.例如,假设我有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
Run Code Online (Sandbox Code Playgroud)

使用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)
Run Code Online (Sandbox Code Playgroud)

然后我想获得列名:

for row in cursor.description:
    print row[0]
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,我会得到Id两次我不想要的.理想情况下,我能得到t1.Id并且t2.Id在输出中.

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

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

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

小智 12

该PyOdbc文档报价

# columns in table x
for row in cursor.columns(table='x'):
    print row.column_name
Run Code Online (Sandbox Code Playgroud)

www.PyOdbc wiki API文档非常有用

  • @ryanjdillon:尝试`row ["column_name"]`.pypyodbc的语法略有不同.根据[docs](https://code.google.com/p/pypyodbc/wiki/Compatibility_with_pyodbc),pyodbc使用`row.attribute`语法,pypyodbc使用`row ["attribute"]`语法. (2认同)

Rus*_*ego 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)
Run Code Online (Sandbox Code Playgroud)

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