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

