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

如何在Python中调用MySQL的CURRENT_TIMESTAMP函数?

在Python中使用MySQL的CURRENT_TIMESTAMP函数插入/更新时间戳

你的问题核心在于把CURRENT_TIMESTAMP当成字符串参数传递给了SQL占位符,参数化查询会自动将这个字符串转义并加上引号,导致MySQL把它当成普通文本而非内置函数,所以才会报Incorrect datetime value错误。

正确的写法:直接在SQL语句中写入CURRENT_TIMESTAMP

不需要通过%s占位符传递,直接把函数写进SQL语句里,MySQL执行时会自动调用该函数获取服务器当前时间:

try:
    mycursor.execute(
        "CREATE TABLE IF NOT EXISTS test (pkID bigint unsigned NOT NULL AUTO_INCREMENT , tsTest TIMESTAMP, PRIMARY KEY (pkID));")
    # 直接在SQL中使用CURRENT_TIMESTAMP,无需参数传递
    sqlInsert = "INSERT INTO test (tsTest) VALUES (CURRENT_TIMESTAMP);"
    mycursor.execute(sqlInsert)  # 不需要传入valsInsert参数
except mysql.connector.Error as err:
    print("MySQL error: {}".format(err))

扩展:UPDATE操作的写法

如果是更新时间戳,逻辑完全一致,函数直接写在SQL中,仅传递需要动态指定的条件参数:

# 更新指定pkID的记录时间戳
sqlUpdate = "UPDATE test SET tsTest = CURRENT_TIMESTAMP WHERE pkID = %s;"
valsUpdate = (1,)  # 仅传递条件参数
mycursor.execute(sqlUpdate, valsUpdate)

为什么不能用参数传递?

参数化查询的设计是为了安全地传递用户输入/动态值,它会自动对传入的内容进行转义处理。当你把'CURRENT_TIMESTAMP'作为参数传入时,最终执行的SQL会变成:

INSERT INTO test (tsTest) VALUES ('CURRENT_TIMESTAMP');

MySQL会把带引号的CURRENT_TIMESTAMP当成字符串,而非内置函数,自然无法解析为合法的时间格式。

这种写法既保证了使用数据库服务器的时间(避免Python与数据库服务器时区/时间不一致的问题),同时也符合安全规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:22:11