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