如何从Python 3将值插入Mysql表中的日期列

如何从Python 3将值插入Mysql表中的日期列,mysql,python-3.x,string-formatting,Mysql,Python 3.x,String Formatting,我想从python代码中更新mysql表中名为file_DATE的日期类型列。我有一个像这样的字符串日期a='2020-02-20'。当我以多种方式尝试时,我总是会遇到以下类似的错误 mysql.connector.errors.DatabaseError: 1411 (HY000): Incorrect datetime value: '1998' for function str_to_date 我不知道1998年是从哪里来的。下面给出了我的示例代码 import mysql.conne

我想从python代码中更新mysql表中名为file_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,))

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

一个选项是在您想要的日期形成一个Python datetime,然后将其绑定到准备好的语句中的
%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,))

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

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

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))

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

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))

谢谢你的回答。您的第二个选项是有效的,但我需要的是字符串格式。我可以传递tuple来执行方法,这很好。但是,在python中,为插入查询设置填充日期列的字符串格式似乎是不可能的;据我所知,它对SQL注入是开放的。谢谢你的回答。您的第二个选项是有效的,但我需要的是字符串格式。我可以传递tuple来执行方法,这很好。但是,在python中,为插入查询设置填充日期列的字符串格式似乎是不可能的;据我所知,它对SQL注入是开放的。