我正在尝试使用 Python 连接到我们基于云的 SQL 服务器数据库。如何将 ODBC 驱动程序名称、IAM 身份验证和访问令牌信息传递给 pyodbc 或 mssql 连接器?如果用 pyodbc 和 mssql 无法完成,SQLAlchemy 可以作为解决方案吗?
我尝试使用 pyodbc,当我提供 DSN 时它可以工作。我在本地(在我的桌面上)运行代码,Python 查找 DSN 详细信息所在的 Windows 注册表。但是,当我在代码存储库文件中在线使用相同的代码时,它不起作用,因为它无法访问我的本地注册表。
以下是如何使用访问令牌进行连接:
def get_conn():
credential = identity.DefaultAzureCredential(exclude_interactive_browser_credential=False)
token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
SQL_COPT_SS_ACCESS_TOKEN = 1256 # This connection option is defined by microsoft in msodbcsql.h
conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
return conn