使用 python 执行存储过程时如何保留列 headers?
How do I retain column headers when executing storedprocedure using python?
在我 运行 下面的代码之后,我收到了来自我的存储过程的所有数据。但是,不返回列名
import pandas as pd
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=PMI0317\Prod;'
'Database=Warehouse;'
'Trusted_Connection=yes;'
)
cursor = conn.cursor()
cursor.execute('SET NOCOUNT ON;EXEC Test.storedproc')
results = cursor.fetchall()
df = pd.DataFrame.from_records(results)
df
Out[113]:
0 1 2 3 4 5 ... 15 16 17 18 19 20
0 9593746 0 COOKCHILDRENS.ORG 1 1.0 Dog ... 0 0 0 0 0 2
1 9593723 0 gmail.com 1 1.0 Dog ... 0 0 12 16 0 0
list(df.columns)
Out[114]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
如您所见,它 returns 我的数据但列名已更改为数字。为什么会这样?我需要更改结果函数中的哪些内容以保留原始列名称?
您可以添加游标描述中的列名:
df = pd.DataFrame.from_records(results, columns = [column[0] for column in cursor.description])
或者,您可以使用 read_sql
并直接加载到 pandas :
conn = pyodbc.connect('Driver={SQL Server};'
'Server=PMI0317\Prod;'
'Database=Warehouse;'
'Trusted_Connection=yes;'
)
df = pd.read_sql('exec Test.storedproc',conn)
在我 运行 下面的代码之后,我收到了来自我的存储过程的所有数据。但是,不返回列名
import pandas as pd
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=PMI0317\Prod;'
'Database=Warehouse;'
'Trusted_Connection=yes;'
)
cursor = conn.cursor()
cursor.execute('SET NOCOUNT ON;EXEC Test.storedproc')
results = cursor.fetchall()
df = pd.DataFrame.from_records(results)
df
Out[113]:
0 1 2 3 4 5 ... 15 16 17 18 19 20
0 9593746 0 COOKCHILDRENS.ORG 1 1.0 Dog ... 0 0 0 0 0 2
1 9593723 0 gmail.com 1 1.0 Dog ... 0 0 12 16 0 0
list(df.columns)
Out[114]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
如您所见,它 returns 我的数据但列名已更改为数字。为什么会这样?我需要更改结果函数中的哪些内容以保留原始列名称?
您可以添加游标描述中的列名:
df = pd.DataFrame.from_records(results, columns = [column[0] for column in cursor.description])
或者,您可以使用 read_sql
并直接加载到 pandas :
conn = pyodbc.connect('Driver={SQL Server};'
'Server=PMI0317\Prod;'
'Database=Warehouse;'
'Trusted_Connection=yes;'
)
df = pd.read_sql('exec Test.storedproc',conn)