将数据加载到Pandas DataFrame到MS SQL python

时间:2018-11-26 13:31:52

标签: python sql-server pandas dataframe

我正在尝试在MS SQL SERVER 2017中构建Python模型。我曾尝试使用一些教程,但结果与预期相差甚远。我想知道此脚本出了什么问题(将SQL表加载到pandas数据帧中):

USE PREPRESS_TMP;
GO

EXEC sp_execute_external_script
    @language=N'Python',
    @script=N'
dataset = pandas.DataFrame(input_data)  
    ',
@input_data_1 = N'Select * FROM dbo.Rests_GO'


GO

错误消息是:

STDOUT message(s) from external script: 

Express Edition will continue to be enforced.
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
  File "C:\Program Files\Microsoft SQL 
Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 406, in 
rx_sql_satellite_call
    rx_native_call("SqlSatelliteCall", params)
  File "C:\Program Files\Microsoft SQL 
Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py", line 291, in rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.

很高兴接受任何帮助。

3 个答案:

答案 0 :(得分:1)

您使用的是Express Edition,对吗?参见:https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2017?view=sql-server-2017。 您的代码没有错,尽管您应该包括输入数据以使内容清晰明了,如下所示

使用AdventureWorksDW2014 去

EXEC sp_execute_external_script
@language = N'Python', @ script = N' 将熊猫作为pd导入 从熊猫导入DataFrame OutputDataSet = pd.DataFrame(InputDataSet.describe()) ', @ input_data_1 = N'SELECT   CAST(TotalProductCost AS浮动) ,CAST(浮动单价) ,CAST(OrderQuantity AS FLOAT) 来自FactInternetSales' 与结果集(( TotalProduct成本浮动 ,单价浮动 ,OrderQuantity FLOAT ))

答案 1 :(得分:1)

尽管我无法回答您的错误,但是您确实需要另一个参数“ input_data_x_name”才能使代码正常工作:

EXEC sp_execute_external_script
@language=N'Python',
@script=N'dataset = pandas.DataFrame(input_data)',
@input_data_1 = N'Select * FROM dbo.Rests_GO',
@input_data_1_name = N'input_data' 

答案 2 :(得分:0)

尽管Express Edition SQL Server版本之一,但此消息略有不同,它告诉您Python客户端库是在SQL Server Express Edition的限制下获得许可的。您可以放心地忽略它,除非您担心线下的可扩展性。实际上,您会在SQL Server Standard Edition上看到有关限制(内存数据集和最大2核处理)的相同错误消息-我已经看过很多遍了,并且只是对其准确性进行了仔细检查。 总之,第一条消息是参考消息,而不是错误消息,因此您可以放心地忽略输出的那部分。

消息的第二部分是您要关注的内容(调试此类TSQL / Python代码时几乎总是这样)。

因此,上面给出的user3912517的解决方案是正确的,尽管它对于理解为什么可能有用。

简单说明: Python需要使用名称引用从SQL Server传入的数据集。

它通过@ input_data_1_name参数执行此操作,该参数有效地“命名”由@ input_data_1中定义的查询返回的数据。

这提供了在SQL Server环境中运行的查询返回的数据集与Python代码引用Python环境中的同一数据集所需的数据框之间的链接。