К какой базе данных вы подключаетесь? Я знаю, что Oracle может быть разборчивой в форматах даты и любит формат ISO 8601 .
** Примечание. Ой, я только что прочитал, что вы используете MySQL. Просто отформатируйте дату и попробуйте ее как отдельный прямой вызов SQL для проверки.
В Python вы можете получить дату ISO, например
now.isoformat()
Например, Oracle любит такие даты, как
insert into x values(99, '31-may-09');
В зависимости от вашей базы данных, если это Oracle, вам может потребоваться TO_DATE:
insert into x
values(99, to_date('2009/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));
Общее использование TO_DATE:
TO_DATE(<string>, '<format>')
Если вы используете другую базу данных (я увидел курсор и подумал о Oracle; я мог ошибаться), проверьте их инструменты формата даты. Для MySQL это DATE_FORMAT (), а для SQL Server - CONVERT.
Также использование такого инструмента, как SQLAlchemy , устранит подобные различия и упростит вашу жизнь.
%s
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s , '%s')",("name", 4,now))