Azure 自动化中的 Python Runbook 运行 可以 SQL 查询吗?
Can a Python Runbook in Azure Automation run a SQL Query?
我在 Microsoft Azure 中有一个 SQL 数据库和一个自动化帐户。每天我都会使用一个存储两串数据的抓取机器人。为此,我使用了一个名为 scraping-bot.io 的网站。获取字符串后,我在 SSMS 中 运行 一个 SQL 查询以手动将它们存储在 table 中。
我的目标是使用 运行book 和我的自动化帐户来抓取网站,然后 运行 SQL 查询将字符串存储在 table .
我可以在我的自动化帐户中使用 Python 运行本书进行抓取:
import requests
import json
url = 'https://www.scraping-bot.io/rawHtmlPage.html'
username = 'xxxx'
apiKey = 'xxxxxxxxxxxxxxxxxxxx'
apiUrl = "https://www.banpais.hn/barradolar.php"
payload = json.dumps({"url": url})
headers = {'Content-Type': "application/json"}
response = requests.request("POST", apiUrl, data=payload, auth=(username, apiKey), headers=headers)
COMPRA = response.text.partition('var d_compra = ')[2][0:(response.text.partition('var d_compra = ')[2].find(';'))]
VENTA = response.text.partition('var d_venta = ')[2][0:(response.text.partition('var d_compra = ')[2].find(';'))]
COMPRA 和 VENTA 是我正在抓取的字符串。
我对这个任务没问题,但是,我无法理解如何 运行 一个 SQL 查询从那里将数据存储在 table 中。
我试过添加这个:
import pyodbc
server = 'tcp:xxxxxxx.database.windows.net'
database = 'xxxxxxxxxxx'
table = '[dbo].[xxxxxxx]'
username = 'xxxxxxxxxxx'
password = 'xxxxxxxxxxx'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=' + server + '; DATABASE=' + database + '; UID=' + username + '; PWD=' + password)
cursor = cnxn.cursor()
cursor.execute("QUERY HERE")
但是,我得到一个错误:
Traceback (most recent call last): File "C:\Temp\fdejt30f.zha\eae7fa25-4541-40d1-bc95-83642c705b27", line 5, in <module> import pyodbcModuleNotFoundError: No module named 'pyodbc'
玩了一会儿之后,我能够 pip install pyodbc,但遇到另一个错误,告诉我没有安装 'ODBC Driver 17 for SQL Server'。我被难住了。
有没有办法 运行 SQL 查询与 python 运行 Azure 自动化帐户中的预订?
要运行 SQL 查询与 python 运行 Azure 自动化帐户中的书籍,您可以尝试以下 3 种方法:
1. Jim Xu 的回答:
async def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
server = 'jimtestsql.database.windows.net'
database = 'test'
username = 'jim@hanxia.onmicrosoft.com'
password = 'Wdsr199545#'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password+';Authentication=ActiveDirectoryPassword')
cursor = cnxn.cursor()
cursor.execute("SELECT Top(1) * FROM [dbo].[StarWars]")
row = cursor.fetchone()
return func.HttpResponse(str(row[0]) + " " + str(row[1]))
2。 Use Hybrid Worker Group as answered by SwathiDhanwada-MSFT
3。 Jason Ye 的回答:
$SqlServer = "jasontest321.database.windows.net"
$SqlServerPort = "1433"
$Database = "jasonsqltest"
$Table = "dbc"
$SqlCredentialAsset = "sql"
$SqlCredential = Get-AutomationPSCredential -Name $SqlCredentialAsset
if ($SqlCredential -eq $null)
{
throw "Could not retrieve '$SqlCredentialAsset' credential asset. Check that you created this first in the Automation service."
}
$SqlUsername = $SqlCredential.UserName
$SqlPass = $SqlCredential.GetNetworkCredential().Password
$Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$SqlServer,$SqlServerPort;Database=$Database;User ID=$SqlUsername;Password=$SqlPass;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;")
$Conn.Open()
$Cmd=new-object system.Data.SqlClient.SqlCommand("insert into dbc(name,age)values('jason2','ba')", $Conn)
$Cmd.CommandTimeout=120
$Ds=New-Object system.Data.DataSet
$Da=New-Object system.Data.SqlClient.SqlDataAdapter($Cmd)
[void]$Da.fill($Ds)
$Ds.Tables.Column1
$Conn.Close()
可以参考Unable to connect to Azure SQL Database via Python ODBC Driver Issue feedback and feedback to Install "ODBC Driver 17 for SQL Server" on the Python Runbook Virtual Machines
我在 Microsoft Azure 中有一个 SQL 数据库和一个自动化帐户。每天我都会使用一个存储两串数据的抓取机器人。为此,我使用了一个名为 scraping-bot.io 的网站。获取字符串后,我在 SSMS 中 运行 一个 SQL 查询以手动将它们存储在 table 中。
我的目标是使用 运行book 和我的自动化帐户来抓取网站,然后 运行 SQL 查询将字符串存储在 table .
我可以在我的自动化帐户中使用 Python 运行本书进行抓取:
import requests
import json
url = 'https://www.scraping-bot.io/rawHtmlPage.html'
username = 'xxxx'
apiKey = 'xxxxxxxxxxxxxxxxxxxx'
apiUrl = "https://www.banpais.hn/barradolar.php"
payload = json.dumps({"url": url})
headers = {'Content-Type': "application/json"}
response = requests.request("POST", apiUrl, data=payload, auth=(username, apiKey), headers=headers)
COMPRA = response.text.partition('var d_compra = ')[2][0:(response.text.partition('var d_compra = ')[2].find(';'))]
VENTA = response.text.partition('var d_venta = ')[2][0:(response.text.partition('var d_compra = ')[2].find(';'))]
COMPRA 和 VENTA 是我正在抓取的字符串。
我对这个任务没问题,但是,我无法理解如何 运行 一个 SQL 查询从那里将数据存储在 table 中。
我试过添加这个:
import pyodbc
server = 'tcp:xxxxxxx.database.windows.net'
database = 'xxxxxxxxxxx'
table = '[dbo].[xxxxxxx]'
username = 'xxxxxxxxxxx'
password = 'xxxxxxxxxxx'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=' + server + '; DATABASE=' + database + '; UID=' + username + '; PWD=' + password)
cursor = cnxn.cursor()
cursor.execute("QUERY HERE")
但是,我得到一个错误:
Traceback (most recent call last): File "C:\Temp\fdejt30f.zha\eae7fa25-4541-40d1-bc95-83642c705b27", line 5, in <module> import pyodbcModuleNotFoundError: No module named 'pyodbc'
玩了一会儿之后,我能够 pip install pyodbc,但遇到另一个错误,告诉我没有安装 'ODBC Driver 17 for SQL Server'。我被难住了。
有没有办法 运行 SQL 查询与 python 运行 Azure 自动化帐户中的预订?
要运行 SQL 查询与 python 运行 Azure 自动化帐户中的书籍,您可以尝试以下 3 种方法:
1. Jim Xu 的回答:
async def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
server = 'jimtestsql.database.windows.net'
database = 'test'
username = 'jim@hanxia.onmicrosoft.com'
password = 'Wdsr199545#'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password+';Authentication=ActiveDirectoryPassword')
cursor = cnxn.cursor()
cursor.execute("SELECT Top(1) * FROM [dbo].[StarWars]")
row = cursor.fetchone()
return func.HttpResponse(str(row[0]) + " " + str(row[1]))
2。 Use Hybrid Worker Group as answered by SwathiDhanwada-MSFT
3。
$SqlServer = "jasontest321.database.windows.net"
$SqlServerPort = "1433"
$Database = "jasonsqltest"
$Table = "dbc"
$SqlCredentialAsset = "sql"
$SqlCredential = Get-AutomationPSCredential -Name $SqlCredentialAsset
if ($SqlCredential -eq $null)
{
throw "Could not retrieve '$SqlCredentialAsset' credential asset. Check that you created this first in the Automation service."
}
$SqlUsername = $SqlCredential.UserName
$SqlPass = $SqlCredential.GetNetworkCredential().Password
$Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$SqlServer,$SqlServerPort;Database=$Database;User ID=$SqlUsername;Password=$SqlPass;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;")
$Conn.Open()
$Cmd=new-object system.Data.SqlClient.SqlCommand("insert into dbc(name,age)values('jason2','ba')", $Conn)
$Cmd.CommandTimeout=120
$Ds=New-Object system.Data.DataSet
$Da=New-Object system.Data.SqlClient.SqlDataAdapter($Cmd)
[void]$Da.fill($Ds)
$Ds.Tables.Column1
$Conn.Close()
可以参考Unable to connect to Azure SQL Database via Python ODBC Driver Issue feedback and feedback to Install "ODBC Driver 17 for SQL Server" on the Python Runbook Virtual Machines