使用Python SQL连接库更新表时datetime对象引发语法错误
解决MySQL DateTime字段更新语法错误问题
问题根源
从错误日志UTC_time=''2021-11-20 21:28:40''可以看出,DateTime值被包裹了两层单引号,这是导致MySQL语法错误的直接原因:手动将datetime对象转为字符串后,参数化查询又自动为字符串添加了一层单引号,造成格式非法。
解决方案
方案1:直接传入datetime对象(推荐)
Python的MySQL连接库(如mysql-connector-python)支持直接将datetime.datetime对象作为参数传入,库会自动处理为MySQL可识别的DateTime格式,无需手动转字符串,彻底避免引号嵌套问题。
示例代码:
import datetime # 直接使用datetime对象,无需转字符串 t = datetime.datetime(2021, 11, 20, 21, 28, 40) update_stmt = "UPDATE raw_tokenomics_data SET UTC_time=%s WHERE raw_tknomics_data_ID=1" cursor.execute(update_stmt, (t,)) connection.commit()
方案2:修正字符串传递方式(备选)
如果必须传递字符串,确保参数化查询不会重复添加引号。检查MySQL连接库配置,确认占位符%s的使用符合库要求(mysql-connector-python默认用%s)。同时,手动构造字符串时不要额外添加单引号,让参数化查询自动处理:
import datetime t = datetime.datetime(2021, 11, 20, 21, 28, 40) tt = t.strftime('%Y-%m-%d %H:%M:%S') update_stmt = "UPDATE raw_tokenomics_data SET UTC_time=%s WHERE raw_tknomics_data_ID=1" # 确保参数是元组形式,不要手动加引号 cursor.execute(update_stmt, (tt,)) connection.commit()
注:此方案不如方案1稳定,不同数据库的DateTime字符串格式可能有差异,直接传datetime对象兼容性更强。
内容的提问来源于stack exchange,提问作者Gaurav Yadav
相关产品推荐
相关产品推荐

