Eu tenho uma coluna de data em uma tabela MySQL. Quero inserir um datetime.datetime()
objeto nesta coluna. O que devo usar na instrução execute?
Eu tentei:
now = datetime.datetime(2009,5,5)
cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))
Estou recebendo uma mensagem de erro como: "TypeError: not all arguments converted during string formatting"
O que devo usar em vez de %s
?
%s
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s , '%s')",("name", 4,now))
Respostas:
Para um campo de hora, use:
Acho que strftime também se aplica a datetime.
fonte
time
neste exemplo?Provavelmente, você está recebendo o TypeError porque precisa de aspas em torno do valor da coluna de dados.
Experimentar:
Com relação ao formato, tive sucesso com o comando acima (que inclui os milissegundos) e com:
Espero que isto ajude.
fonte
%s
em torno depymsql
.Tente usar
now.date()
para obter umDate
objeto em vez de umDateTime
.Se isso não funcionar, convertê-lo em uma string deve funcionar:
fonte
Use o método Python
datetime.strftime(format)
, onde format ='%Y-%m-%d %H:%M:%S'
.Fusos horários
Se os fusos horários forem uma preocupação, o fuso horário do MySQL pode ser definido para UTC da seguinte maneira:
E o fuso horário pode ser definido em Python:
Documentação MySQL
fonte
A qual banco de dados você está se conectando? Eu sei que a Oracle pode ser exigente quanto aos formatos de data e gosta do formato ISO 8601 .
** Nota: Oops, acabei de ler que você está no MySQL. Basta formatar a data e tentar como uma chamada SQL direta separada para teste.
Em Python, você pode obter uma data ISO como
Por exemplo, a Oracle gosta de datas como
Dependendo do seu banco de dados, se for Oracle, pode ser necessário TO_DATE:
O uso geral de TO_DATE é:
Se estiver usando outro banco de dados (vi o cursor e pensei Oracle; posso estar errado) verifique suas ferramentas de formato de data. Para MySQL é DATE_FORMAT () e SQL Server é CONVERT.
Usar também uma ferramenta como o SQLAlchemy removerá diferenças como essas e facilitará sua vida.
fonte
Se você estiver usando apenas um datetime.date python (não um datetime.datetime completo), apenas converta a data como uma string. Isso é muito simples e funciona para mim (mysql, python 2.7, Ubuntu). A coluna
published_date
é um campo de data do MySQL, a variável pythonpublish_date
édatetime.date
.fonte
quando está inserindo em t-sql
isso falha:
isso funciona:
jeito fácil:
fonte