web-dev-qa-db-ja.com

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']

cursor?から直接その情報はcursorに保存されていますか?

33
dmvianna

カーソルの説明から列を取得できます。

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

75
Matti John

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

前の答えを改善して、パンダの文脈で、これはまさに私が期待することをすることがわかりました:

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

Matti John が提供するコードからNoneTypeエラーが発生した場合は、必ずcursor.description callafterデータベースからデータを取得しました。例:

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

これは私のためにそれを修正しました。

2
Morten Wehlast