Ответ 1
Вы можете получить столбцы из описания курсора:
columns = [column[0] for column in cursor.description]
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']
прямо из курсора? Эта информация хранится в курсоре вообще?
Вы можете получить столбцы из описания курсора:
columns = [column[0] for column in cursor.description]
Недавние 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)
Улучшая предыдущий ответ, в контексте pandas, я нашел, что это делает именно то, что я ожидаю:
DF.columns = DataFrame(np.matrix(cursor.description))[0]
В случае, если вы столкнулись с ошибкой NoneType
из кода, предоставленного Matti John, обязательно выполните вызов cursor.description
после того, как вы получили данные из базы данных. Пример:
cursor = cnxn.cursor()
cursor.execute("SELECT * FROM my_table")
columns = [column[0] for column in cursor.description]
Это исправило это для меня.