如何从 Python 3 将值插入 Mysql table 中的 DATE 列

How to insert value into DATE column in Mysql table from Python 3

我想从 python 代码更新 mysql table 中名为 file_date 的 DATE 类型列。我有一个像这样的字符串日期 a='2020-02-20'。当我尝试多种方式时,我总是遇到类似下面的错误,

 mysql.connector.errors.DatabaseError: 1411 (HY000): Incorrect datetime value: '1998' for function str_to_date

不知道这个1998是从哪里来的。我的示例代码如下

import mysql.connector
a='2020-02-20'
insert_qry="insert into table_name(file_date) values(STR_TO_DATE({},'%Y-%m-%d'))".format(a)
#assume I have a db_cursor created to connect mysql server
db_cursor.execute(insert_qry)

指出哪里出错了。提前致谢。

一种选择是在您想要的日期形成一个 Python 日期时间,然后将其绑定到准备好的语句中的 %s 占位符:

import mysql.connector
a = datetime.datetime(2020, 2, 20)
insert_qry = "INSERT INTO table_name (file_date) VALUES (%s)"
db_cursor.execute(insert_qry, (a,))

请注意,以下方法也应该有效:

a = '2020-02-20'
insert_qry = "INSERT INTO table_name (file_date) VALUES (%s)"
db_cursor.execute(insert_qry, (a,))

这也应该有效,因为字符串文字 '2020-02-20' 也是 MySQL 中的有效日期文字。但是,最好在 Python 中使用日期对象并将其绑定到占位符,让准备好的语句 API 担心转换。

你不应该像这样插入日期值,首先将值存储到 python 日期时间变量,然后将其更改为所需的格式并推送它

from datetime import datetime
a='2020-02-20'
x= datetime.datetime.strptime(a, '%Y-%m-%d')
formatted_date = x.strftime('%Y-%m-%d %H:%M:%S')
cursor.execute('insert into table(file_date) values(%s)', (formatted_date))