【问题标题】:Getting Table and Column names in PyOdbc在 PyOdbc 中获取表名和列名
【发布时间】:2013-02-26 20:35:28
【问题描述】:

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

有没有更好的方法?任何建议将不胜感激。

【问题讨论】:

  • 这个问题的副本? stackoverflow.com/questions/12704305/…
  • 您希望获得前缀列名时遇到了一些麻烦 - 它们实际上在您阅读这些查询结果的任何时候都不存在,并且您永远无法通过您建议的标识符访问这些值(例如,t1.Id 在我知道的任何平台下都不是 SQL 中输出列的名称)。 7 年多后,我建议重新评估这是否真的是您想要的,或者您是否可以通过将每列别名为 t1_id 之类的东西来简化这一点,并以表别名为前缀。

标签: python pyodbc


【解决方案1】:

PyOdbc 文档提供

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

www.PyOdbc wiki API 文档很有用

【讨论】:

  • 我在最初的问题中拒绝了这个解决方案。请阅读建议的解决方案#2
  • 我发现这个正在寻找一种方法来使用pypyodbc 执行此操作,但此方法不起作用。任何建议都会很棒。
  • @ryanjdillon:改用row["column_name"]。 pypyodbc 的语法略有不同。根据docs,pyodbc 使用row.attribute 语法,pypyodbc 使用row["attribute"] 语法。
  • @Geordie Jon : 你拯救了我的一天
【解决方案2】:

我是这样做的。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这可能是留下评论而不是接受的答案。这个“答案”没有提供有价值的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多