Получение имен таблиц и столбцов в PyOdbc

Я хотел бы получить полностью указанное имя столбца из курсора 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.Id и t2.Id на выходе.

некоторые из решений, о которых я думал (и почему я действительно не хочу их реализовывать):

  1. переименуйте столбцы в запросе - в моем реальном случае использования есть десятки таблиц, некоторые с десятками строк, которые меняются слишком часто
  2. проанализируйте мой запрос и автоматизируйте генерацию SQL-запросов (в основном проверяя запрос на таблицы, используя курсор.функция tables для получения столбцов, а затем замены select * С набором именованных столбцов) - если у меня тоже есть, я сделаю это, но это похоже на перебор для тестирования жгута

есть ли лучший способ? Любые советы будут оценены.

3 ответов


на PyOdbc docs предлагают

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

www.PyOdbc wiki документы API полезны


вот как я это делаю.

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


кажется, невозможно сделать то, что я хочу, не написав приличное количество кода, чтобы завернуть его. Ни один из других ответов на самом деле не ответил на вопрос о возврате разных имен столбцов таблицей, из которой они происходят, некоторым относительно автоматическим образом.