我一直在研究Python中的技能集,以调用RestAPI,返回/解析json并存储结果。最终,我的最终目标是构建程序,以将我们的数据引入我们的数据仓库。
我已经能够调用API并将数据存储到CSV中,并且可以打开数据库连接并运行SQL语句并打印结果,但这是我的止步。
现在,SQL Server 2017能够在SSMS中运行python脚本并创建存储过程,我希望可以弥合SQL的空白,并使用Python调用API,返回数据,然后使用SQL进行验证和附加数据到正确的表。
我在SQL Server中看到的关于Python的唯一脚本示例用于分析SQL Server中已有的数据,而不是用于存储SQL中的数据。
这是我到目前为止所拥有的。
我需要哪些Python包,如何将SQL语句/ SQL变量插入Python脚本中以使用?
--Python Version
execute sp_execute_external_script
@language = N'Python',
@script = N'
import sys
import codecs
import requests
import json
locations = select top(10) locationId from TestDb.locationstable
for j in range(locations):
url = "http://example.com/api/location/" + locations[j]+ "/users"
querystring = {"pretty":"1"}
headers = {"Api-Key": ""}
r = requests.request("GET", url, headers=headers, params=querystring)
d = r.json()
status = d["status"]
responseData = d["data"]["Users"]
print(status)
print(responseData)
当我将for循环取出并将一个位置硬编码到脚本中时,python部分在SQL Server中工作,但不确定如何获取位置变量,该位置变量引用来自select语句的数据列表以在Python中工作脚本。
然后,如果返回的响应数据如下所示,我将如何处理返回的数据:
STDOUT message(s) from external script:
status: 200
STDOUT message(s) from external script:
[{'id': '123', 'name': 'Sally'}, {'id': '124', 'name': 'Joe'}]
答案 0 :(得分:0)
我认为在已经存在于您的SQL Server实例本身中的Python脚本中执行SQL语句确实没有任何意义。据我了解,能够从SQL Server调用Python的好处是能够访问某些分析功能/转换,这在T-SQL中是不可行的。逻辑应如下:
对我来说,T-SQL脚本和Python脚本的组合似乎有点麻烦。我个人建议将Python脚本用于高级数学功能或您无法在SQL中完成的自包含转换。出于ETL目的(提取转换和加载),我建议您将Python脚本带到SQL Server之外,并可能使用Docker构建一个合适的Python环境。如果您的脚本位于SQL Server外部,则可以使用不同的方法来连接和查询数据库。我建议您研究一下Pyodbc。