使用Azure Datapreb库与Azure AD服务主体的Azure SQL数据库连接中出错

2024-06-07 02:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Azure datapreb库将Azure SQL数据库与Azure AD服务主体连接起来。你知道吗

请检查以下代码:-

import logging
import struct
from . import hy_param
import azureml.dataprep as dprep
import azure.functions as func
import adal

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    try:
        SQL_COPT_SS_ACCESS_TOKEN = 1256
        # connection string for database connection without username and password
        connection_string = "Driver=" + hy_param.sql_driver + ';SERVER=' + hy_param.server_name + ';DATABASE=' + hy_param.database_name

        token = get_token()
        conn = dprep.MSSQLDataSource(connection_string, attrs_before = { SQL_COPT_SS_ACCESS_TOKEN:token})
        logging.info("Connection is : ",conn)
        cursor = conn.cursor()

        # # Read data from table
        cursor.execute("SELECT GETDATE()")
        row = cursor.fetchone()
        return func.HttpResponse(f"Created :- {row}",
            status_code=200
        )
    except Exception as e:
        return func.HttpResponse(f"Error in sql database connection : {e}", status_code=400)

def get_token():
    # get token using the Azure AD Service Principals
    authority_url = (hy_param.login_url + '/' + hy_param.tenant_id)

    context = adal.AuthenticationContext(authority_url, api_version=None)
    access_token = context.acquire_token_with_client_credentials(hy_param.resource_url, hy_param.client_id, hy_param.client_secret)

    converted_token = bytes(access_token["accessToken"], "UTF-8")
    operated_token = b''
    for each_token_data in converted_token:
        operated_token += bytes({each_token_data})
        operated_token += bytes(1)
    token_data = struct.pack("=i", len(operated_token)) + operated_token
    return token_data

请检查以下错误:-

Error in sql database connection : __init__() got an unexpected keyword argument 'attrs_before'

有没有办法解决上述问题?我想使用带有Azure AD服务主体的Datapreb库访问Azure SQL DB。

我在Pyodb库上试过,效果不错,但在datapreb库上没有。你知道吗


Tags: importtokenurlsqldataparamloggingconnection
1条回答
网友
1楼 · 发布于 2024-06-07 02:54:36

错误是说这行它不满意并且不识别这个参数。您使用的库的版本是什么?它是否可能不接受名为this或renamed(attrs\u before)的参数?你知道吗

conn = dprep.MSSQLDataSource(connection_string, attrs_before = { SQL_COPT_SS_ACCESS_TOKEN:token})

相关问题 更多 >