web-dev-qa-db-fra.com

retourne les noms des colonnes de l'instruction 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())

C'est bien de remplir mon pandas DataFrame. Mais comment puis-je obtenir

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

directement de curseur? Ces informations sont-elles stockées dans curseur?

33
dmvianna

Vous pouvez obtenir les colonnes de la description du curseur:

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

75
Matti John

Les récents pandas ont un niveau supérieur read_sql fonctions qui peuvent le faire pour vous

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)
31
phoenix10k

En améliorant la réponse précédente, dans le contexte des pandas, j'ai trouvé que cela fait exactement ce que j'attends:

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

Dans le cas où vous rencontrez l'erreur NoneType du code fourni par Matti John , assurez-vous de faire le cursor.description appeler après que vous ayez récupéré les données de la base de données. Un exemple:

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

Cela m'a arrangé.

2
Morten Wehlast