Mam kolumnę z datą w tabeli MySQL. Chcę wstawić datetime.datetime()
obiekt do tej kolumny. Czego powinienem używać w instrukcji execute?
Próbowałem:
now = datetime.datetime(2009,5,5)
cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))
Otrzymuję komunikat o błędzie: "TypeError: not all arguments converted during string formatting"
Czego należy używać zamiast %s
?
%s
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s , '%s')",("name", 4,now))
Odpowiedzi:
W przypadku pola czasu użyj:
Myślę, że strftime dotyczy również datetime.
źródło
time
w tym przykładzie?Najprawdopodobniej otrzymasz TypeError, ponieważ potrzebujesz cudzysłowów wokół wartości kolumny dat.
Próbować:
Jeśli chodzi o format, udało mi się z powyższym poleceniem (które zawiera milisekundy) i:
Mam nadzieję że to pomoże.
źródło
%s
wpymsql
.Spróbuj użyć,
now.date()
aby uzyskaćDate
obiekt, a nie plikDateTime
.Jeśli to nie zadziała, konwersja tego na ciąg znaków powinna działać:
źródło
Użyj metody Python
datetime.strftime(format)
, gdzie format ='%Y-%m-%d %H:%M:%S'
.Strefy czasowe
Jeśli problemem są strefy czasowe, strefę czasową MySQL można ustawić na czas UTC w następujący sposób:
Strefę czasową można ustawić w Pythonie:
Dokumentacja MySQL
źródło
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
Na przykład Oracle lubi takie randki jak
W zależności od bazy danych, jeśli jest to Oracle, może być konieczne TO_DATE:
Ogólne zastosowanie terminu TO_DATE to:
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.
źródło
Jeśli używasz tylko pythona datetime.date (nie pełnej daty i godziny), po prostu rzutuj datę jako ciąg. To jest bardzo proste i działa dla mnie (mysql, python 2.7, Ubuntu). Kolumna
published_date
to pole daty MySQL, a zmienna Pythonapublish_date
todatetime.date
.źródło
podczas wstawiania do t-sql
to się nie udaje:
to działa:
łatwy sposób:
źródło