Подтвердить что ты не робот

Возвращает имена столбцов из инструкции pyodbc execute()

from pandas import DataFrame
import pyodbc

cnxn = pyodbc.connect(databasez)
cursor.execute("""SELECT ID, NAME AS Nickname, ADDRESS AS Residence FROM tablez""")
DF = DataFrame(cursor.fetchall())

Это нормально для заполнения моего pandas DataFrame. Но как мне получить

DF.columns = ['ID', 'Nickname', 'Residence']

прямо из курсора? Эта информация хранится в курсоре вообще?

4b9b3361

Ответ 1

Вы можете получить столбцы из описания курсора:

columns = [column[0] for column in cursor.description]

Ответ 2

Недавние pandas имеют функции read_sql более высокого уровня, которые могут сделать это для вас

import pyodbc
import pandas as pd

cnxn = pyodbc.connect(databasez)
DF = pd.read_sql_query("SELECT ID, NAME AS Nickname, ADDRESS AS Residence FROM tablez", cnxn)

Ответ 3

Улучшая предыдущий ответ, в контексте pandas, я нашел, что это делает именно то, что я ожидаю:

DF.columns = DataFrame(np.matrix(cursor.description))[0]

Ответ 4

В случае, если вы столкнулись с ошибкой NoneType из кода, предоставленного Matti John, обязательно выполните вызов cursor.description после того, как вы получили данные из базы данных. Пример:

cursor = cnxn.cursor()
cursor.execute("SELECT * FROM my_table")
columns = [column[0] for column in cursor.description]

Это исправило это для меня.