You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python pyodbc写入Azure SQL Database时遇ProgrammingError错误求助

问题:迁移至Azure SQL Database时出现pyodbc ProgrammingError错误

之前使用Python pyodbc向SQL Server Express写入数据,因Express达到10GB磁盘上限,切换至Microsoft Azure SQL Database时遇到以下错误:

ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Reference to database and/or server name in 'master.dbo.syscharsets' is not supported in this version of SQL Server.

使用的代码如下:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.111.111;DATABASE=MYDB;UID=' + keyring.get_password("local", "UID") + ';PWD=' + keyring.get_password("local", "PWD") + ';')

cursor = conn.cursor()

for index, row in df_add.iterrows():
    
    cursor.execute("INSERT INTO mytable([ID],[CreateDate]) values(?,?)",row['ID'], row['CreateDate']) 

conn.commit()
cursor.close()
conn.close()

解决方案

  • 更新ODBC驱动:错误中的master.dbo.syscharsets是旧版SQL Server系统视图,Azure SQL Database不支持该视图,而旧版{SQL Server}驱动会尝试访问它。需改用针对Azure优化的驱动,推荐使用{ODBC Driver 17 for SQL Server}或更高版本,修改连接字符串的DRIVER部分:
    conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=your-azure-sql-server-name.database.windows.net;DATABASE=MYDB;UID=' + keyring.get_password("azure", "UID") + ';PWD=' + keyring.get_password("azure", "PWD") + ';')
    
  • 修正SERVER参数:Azure SQL Database的服务器地址格式为{server-name}.database.windows.net,需替换为你的Azure SQL服务器全名,而非本地IP。
  • 验证权限与数据库:确保使用的账号拥有目标数据库的写入权限,且MYDB已在Azure SQL实例中创建。
  • 批量插入优化(可选):原代码逐行插入效率较低,针对Azure SQL可改用executemany提升性能:
    cursor.executemany("INSERT INTO mytable([ID],[CreateDate]) values(?,?)", [(row['ID'], row['CreateDate']) for index, row in df_add.iterrows()])
    

内容的提问来源于stack exchange,提问作者PyBoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:31:15