如何将具有多个结果集的SQL Server存储过程的输出保存到Pandas的每个数据框中 [英] How to save output of SQL Server stored procedure with multiple result sets into each dataframe in pandas

查看:77
本文介绍了如何将具有多个结果集的SQL Server存储过程的输出保存到Pandas的每个数据框中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个SQL Server存储过程,该过程返回3个单独的表.

I have a SQL Server stored procedure that returns 3 separate tables.

如何使用熊猫将每个表存储在不同的数据框中?

How can I store each of this table in different data-frame using pandas?

类似的东西:

  • df1 -第一张桌子
  • df2 -第二张表
  • df3 -第三张表
  • df1 - first table
  • df2 - second table
  • df3 - third table

我应该从哪里开始看?

谢谢

import pandas as pd 
import pyodbc 
from datetime import datetime


param = datetime(year=2019,month=7,day=31)
query = """EXECUTE [dbo].PythonTest_USIC_TreatyYear_ReportingPackage  @AsOFDate = '{0}'""".format(param)
conn = pyodbc.connect('DRIVER={SQL Server};server=myserver;DATABASE=mydatabase;Trusted_Connection=yes;')
df = pd.read_sql_query(query, conn)
print(df.head())

推荐答案

您应该能够仅遍历结果集,将它们转换为DataFrame,然后将这些DataFrame附加到列表中.例如,给定存储过程

You should be able to just iterate through the result sets, convert them to DataFrames, and append those DataFrames to a list. For example, given the stored procedure

CREATE PROCEDURE dbo.MultiResultSP 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    SELECT 1 AS [UserID], N'Gord' AS [UserName]
    UNION ALL
    SELECT 2 AS [UserID], N'Elaine' AS [UserName];

    SELECT N'pi' AS [Constant], 3.14 AS [Value]
    UNION ALL
    SELECT N'sqrt_2' AS [Constant], 1.41 AS [Value]
END

Python代码如下所示:

the Python code would look something like this:

data_frames = []
crsr = cnxn.cursor()
crsr.execute("EXEC dbo.MultiResultSP")
result = crsr.fetchall()
while result:
    col_names = [x[0] for x in crsr.description]
    data = [tuple(x) for x in result]  # convert pyodbc.Row objects to tuples
    data_frames.append(pd.DataFrame(data, columns=col_names))
    if crsr.nextset():
        result = crsr.fetchall()
    else:
        result = None

# check results
for df in data_frames:
    print(df)
    print()
""" console output:

   UserID UserName
0       1     Gord
1       2   Elaine

  Constant Value
0       pi  3.14
1   sqrt_2  1.41

"""

这篇关于如何将具有多个结果集的SQL Server存储过程的输出保存到Pandas的每个数据框中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆