如何从Azure ML Jupyter笔记本将Pandas数据框写入Azure SQL数据库?
解决Azure ML中将Pandas数据框写回Azure SQL的问题
一、Driver参数的正确设置
你代码里写的{ODBC Driver 17 for SQL Server}是完全正确的,Azure ML的计算实例默认预装了该版本的ODBC驱动,直接使用即可。
需要注意的是你代码中server变量末尾多了一个空格,这会导致连接失败,修正后应为:
server = 'server.windows.net'
二、更优实现方式
1. 使用SQLAlchemy引擎(推荐)
Pandas的to_sql对SQLAlchemy的兼容性更好,还能自动管理连接池,代码更简洁稳定:
import pandas as pd from sqlalchemy import create_engine # 数据准备 data = [ ['94732','John', 'Y', 'Seg1'], ['93045','Jane', 'N', 'Seg2']] headers=['ID', 'name', 'Class', 'Segment'] testing_df = pd.DataFrame(data, columns=headers) # 连接参数 server = 'server.windows.net' database = 'database' username = 'username' password = 'pwd' driver = 'ODBC Driver 17 for SQL Server' # 构建SQLAlchemy连接字符串(替换空格为+适配URL格式) connection_string = f"mssql+pyodbc://{username}:{password}@{server}/{database}?driver={driver.replace(' ', '+')}" engine = create_engine(connection_string) # 写入数据 table_name = 'ddo_datacove_output_test' testing_df.to_sql(table_name, engine, index=False, if_exists='append')
2. 利用Azure ML工作区连接资产(更安全)
既然你已将Azure SQL表设为资产,可直接通过Azure ML SDK获取预配置的连接,避免硬编码敏感信息:
import pandas as pd from azureml.core import Workspace from sqlalchemy import create_engine # 获取当前工作区 ws = Workspace.from_config() # 获取已注册的SQL数据库连接资产(替换为你的连接资产名称) sql_datastore = ws.datastores['AzureSQL_Connection'] # 构建连接字符串 driver = 'ODBC Driver 17 for SQL Server' connection_string = f"mssql+pyodbc://{sql_datastore.username}:{sql_datastore.password}@{sql_datastore.server_name}/{sql_datastore.database_name}?driver={driver.replace(' ', '+')}" engine = create_engine(connection_string) # 写入数据 testing_df.to_sql('ddo_datacove_output_test', engine, index=False, if_exists='append')
额外注意事项
- 确保Azure ML计算实例的公网IP已加入Azure SQL数据库的防火墙允许列表,否则会被拒绝连接。
- 若遇到驱动版本问题,可执行
pyodbc.drivers()查看当前环境可用的驱动列表,选择对应版本即可。
内容的提问来源于stack exchange,提问作者DC2021
相关产品推荐
相关产品推荐

