Получение имен таблиц и столбцов в 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
на выходе.
некоторые из решений, о которых я думал (и почему я действительно не хочу их реализовывать):
- переименуйте столбцы в запросе - в моем реальном случае использования есть десятки таблиц, некоторые с десятками строк, которые меняются слишком часто
- проанализируйте мой запрос и автоматизируйте генерацию 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
кажется, невозможно сделать то, что я хочу, не написав приличное количество кода, чтобы завернуть его. Ни один из других ответов на самом деле не ответил на вопрос о возврате разных имен столбцов таблицей, из которой они происходят, некоторым относительно автоматическим образом.