Z jaką bazą danych się łączysz? Wiem, że Oracle może być wybredny w kwestii formatów dat i lubi format ISO 8601 .
** Uwaga: Ups, właśnie przeczytałem, że jesteś na MySQL. Po prostu sformatuj datę i wypróbuj ją jako osobne bezpośrednie wywołanie SQL do przetestowania.
W Pythonie możesz uzyskać datę ISO, taką jak
now.isoformat()
Na przykład Oracle lubi takie randki jak
insert into x values(99, '31-may-09');
W zależności od bazy danych, jeśli jest to Oracle, może być konieczne TO_DATE:
insert into x
values(99, to_date('2009/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));
Ogólne zastosowanie terminu TO_DATE to:
TO_DATE(<string>, '<format>')
Jeśli korzystasz z innej bazy danych (widziałem kursor i pomyślałem, że Oracle; mogę się mylić), sprawdź ich narzędzia do formatowania daty. Dla MySQL jest to DATE_FORMAT (), a SQL Server to CONVERT.
Również użycie narzędzia takiego jak SQLAlchemy usunie takie różnice i ułatwi Ci życie.
%s
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s , '%s')",("name", 4,now))