如何将sp_execute_external_script中的值输出到表中

时间:2017-12-23 17:00:55

标签: python sql sql-server pandas

拥有以下代码,如何将外部python脚本中的值输出到我可以查询的sql表中。

EXECUTE sp_execute_external_script 
@language = N'Python',
@script = N'
            import pandas as pd
            import numpy as np

            rd = np.random.randn(100)
            df = pd.DataFrame(rd).describe()
            print(df)'

提前致谢。

2 个答案:

答案 0 :(得分:3)

的确,正如R版本所示,请考虑INSERT INTO myTable ...使用TSQL中Python执行脚本的结果,指定 @output_data 。但是,首先创建要附加的表,相应地对齐列和类型。

此外,由于您使用describe(),请考虑在输出之前重命名列。最后,默认情况下, pandas 包含在SQL Server 2016中的Python机器学习服务中,如tutorial中所述,因此无需导入(可能与numpy相同)。

DROP TABLE IF EXISTS myTable;

CREATE TABLE myTable (
    [aggregate] varchar(50) NOT NULL,
    [value] float NOT NULL
    )
GO

INSERT INTO myTable    
EXECUTE sp_execute_external_script 
@language = N'Python',
@script = N'import numpy as np

            rd = np.random.randn(100)
            df = pandas.DataFrame(rd).describe().reset_index().rename(columns={"index":"aggregate", 0:"value"})',
@output_data_1_name = N'df';

GO

答案 1 :(得分:0)

declare @py nvarchar(max);

set @py = N'from pandas.io.json import json_normalize

rdd = {"documents": [{"id": "1", "score": 0.97},{"id": "2","score": 0.87},{"id": "3", "score": 0.78}],"errors": []}
print(type(rdd))

df = json_normalize(rdd, "documents")
print(df)
print(type(df))
'; 

drop table if exists apiresults
create table apiresults (id int, score float)

insert into apiresults
exec sp_execute_external_script 
    @language = N'Python',
    @script = @py,
    @output_data_1_name =N'df'

select * from apiresults