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

pyodbc中INSERT INTO语句无法正常执行的问题求助

问题解决:SQL Server INSERT语句42000错误

核心错误原因

你的INSERT语句中表名employee table包含空格,SQL Server会将其识别为两个独立的标识符(employee和table),从而触发42000语法错误(SQL标准语法错误代码)。

修正方案

将带空格的表名用方括号[]包裹,修改后的代码如下:

import pyodbc

# Connect to the database
connection = pyodbc.connect(
    r'DRIVER={SQL Server};'
    r'SERVER=******;'
    r'DATABASE=****;'
    r'UID=****;'
    r'PWD=*****'
)
try:
    cursor = connection.cursor()
    # 用[]包裹带空格的表名
    cursor.execute("INSERT INTO [employee table] (FName, SSN) VALUES (?, ?)", "john", "123-123-1234")
    connection.commit()
    print("success")
except pyodbc.Error as e:
    # 打印具体错误信息,方便后续排查
    print(f"error: {str(e)}")
    connection.rollback()
finally:
    # 确保资源被关闭,避免泄漏
    cursor.close()
    connection.close()

额外优化建议

  1. 捕获异常时打印详细信息:原代码只输出"error",无法定位具体问题,改为print(f"error: {str(e)}")可以获取SQL Server返回的完整错误描述。
  2. 使用finally块管理资源:确保无论代码执行成功还是失败,游标和连接都会被正确关闭。
  3. 推荐使用上下文管理器:简化资源管理流程,无需手动调用close():
import pyodbc

conn_str = (
    r'DRIVER={SQL Server};'
    r'SERVER=******;'
    r'DATABASE=****;'
    r'UID=****;'
    r'PWD=*****'
)

with pyodbc.connect(conn_str) as connection:
    with connection.cursor() as cursor:
        cursor.execute("INSERT INTO [employee table] (FName, SSN) VALUES (?, ?)", "john", "123-123-1234")
        print("success")
# 上下文管理器会自动处理提交/回滚,并关闭连接、游标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:41:34