获取PyOdbc中的表和列名称
我想从一个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.Id
和t2.Id
。
我想到的一些解决方案(以及我为什么不想实施它们):
- 在查询中重命名列 - 在我实际的使用场景中,有很多表,有些表的行数也很多,而且这些表的结构变化得太频繁。
- 解析我的查询并自动生成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文档很有用