如何使用pymssql连接Azure Synapse Analytics非内置数据仓库?
用Python连接Azure Synapse Analytics非内置数据仓库的解决方案
可以用pymssql或pyodbc连接Azure Synapse的非内置数据仓库,以下是具体配置和排查方案:
一、使用pymssql连接
关键配置与排查点
- 确认连接参数:
- 服务器地址必须为
<synapse-workspace-name>.sql.azuresynapse.net,不要沿用内置数据库的地址 - 明确指定目标非内置数据仓库的名称,而非默认的
master库 - SQL账号格式为
<server-admin-login>@<synapse-workspace-name>,确保密码正确且账号拥有目标仓库的访问权限
- 服务器地址必须为
- 检查防火墙规则:确保你的客户端IP已加入Synapse工作区的防火墙允许列表(非内置仓库继承工作区防火墙设置)
- 升级pymssql版本:旧版本可能存在兼容性问题,执行
pip install --upgrade pymssql更新到最新稳定版
示例代码
import pymssql # 替换为你的实际参数 conn = pymssql.connect( server='<synapse-workspace-name>.sql.azuresynapse.net', user='<admin-username>@<synapse-workspace-name>', password='<admin-password>', database='<your-non-builtin-dw-name>' ) # 测试连接有效性 cursor = conn.cursor() cursor.execute('SELECT 1') print(cursor.fetchone()) conn.close()
二、使用pyodbc替代(推荐用于Azure AD认证场景)
如果pymssql在Azure AD认证场景下存在限制,可改用pyodbc,它对Synapse的支持更全面:
安装依赖
pip install pyodbc
SQL账号连接示例
import pyodbc conn_str = ( 'DRIVER={ODBC Driver 17 for SQL Server};' 'SERVER=<synapse-workspace-name>.sql.azuresynapse.net;' 'DATABASE=<your-non-builtin-dw-name>;' 'UID=<admin-username>@<synapse-workspace-name>;' 'PWD=<admin-password>' ) conn = pyodbc.connect(conn_str) cursor = conn.cursor() cursor.execute('SELECT 1') print(cursor.fetchone()) conn.close()
Azure AD交互式认证示例
import pyodbc conn_str = ( 'DRIVER={ODBC Driver 17 for SQL Server};' 'SERVER=<synapse-workspace-name>.sql.azuresynapse.net;' 'DATABASE=<your-non-builtin-dw-name>;' 'Authentication=ActiveDirectoryInteractive' ) # 执行后会弹出Azure AD登录窗口 conn = pyodbc.connect(conn_str)
三、常见失败排查
- 若提示
Login failed for user:检查账号格式、密码正确性,同时确认该账号已在目标数据仓库中被分配db_datareader等必要角色 - 若提示
Cannot open server requested by the login:核对服务器地址拼写,检查防火墙是否放行当前IP - 若提示
Driver not found:确认ODBC Driver 17 for SQL Server已正确安装(pyodbc场景),或pymssql依赖的FreeTDS组件配置正常
内容的提问来源于stack exchange,提问作者yu kang
相关产品推荐
相关产品推荐

