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

使用pyodbc向SQL Server插入datetime对象时报'2021'附近语法错误(102)

错误根因
  • 直接通过F字符串将Python datetime对象拼接进SQL语句时,Python默认转换出的日期字符串格式不符合SQL Server datetime2类型的语法规范,因此触发2021附近语法错误的提示
  • 字符串拼接SQL本身属于不安全的写法,存在SQL注入的安全隐患
修复方案

方案1:使用参数化查询(最推荐)

参数化查询会自动完成Python datetime类型到SQL Server datetime2类型的格式映射,无需手动处理日期格式,同时规避SQL注入风险:

import datetime

creationdatetime = datetime.datetime.now()
# 使用?作为参数占位符,不要直接拼接数值
sql = "INSERT INTO [SCHEMA].[TABLE] ([CreationDateTime]) VALUES (?)"
# 将参数以元组形式传入execute方法的第二个参数
cursor.execute(sql, (creationdatetime,))
cursor.commit()

方案2:手动转换为兼容的日期格式(不推荐,仅做参考)

如果特殊场景需要手动拼接SQL,需将datetime转换为SQL Server可识别的ISO 8601标准格式:

import datetime

creationdatetime = datetime.datetime.now()
# 转换为ISO 8601标准格式,避免语言/区域设置导致的格式不兼容问题
dt_compatible_str = creationdatetime.isoformat()
sql = f"INSERT INTO [SCHEMA].[TABLE] ([CreationDateTime]) VALUES ('{dt_compatible_str}')"
cursor.execute(sql)
cursor.commit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:07