Tengo una columna de fecha en una tabla MySQL. Quiero insertar un datetime.datetime()
objeto en esta columna. ¿Qué debería usar en la instrucción de ejecución?
Yo he tratado:
now = datetime.datetime(2009,5,5)
cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))
Recibo un error como: "TypeError: not all arguments converted during string formatting"
¿Qué debo usar en lugar de %s
?
%s
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s , '%s')",("name", 4,now))
Respuestas:
Para un campo de tiempo, use:
Creo que strftime también se aplica a datetime.
fuente
time
en este ejemplo?Lo más probable es que obtenga TypeError porque necesita comillas alrededor del valor de la columna de fecha.
Tratar:
Con respecto al formato, tuve éxito con el comando anterior (que incluye los milisegundos) y con:
Espero que esto ayude.
fuente
%s
enpymsql
.Intente usar
now.date()
para obtener unDate
objeto en lugar de unDateTime
.Si eso no funciona, convertirlo en una cadena debería funcionar:
fuente
Utilice el método Python
datetime.strftime(format)
, donde formato ='%Y-%m-%d %H:%M:%S'
.Zonas horarias
Si las zonas horarias son una preocupación, la zona horaria de MySQL se puede configurar para UTC de la siguiente manera:
Y la zona horaria se puede configurar en Python:
Documentación de MySQL
fuente
¿A qué base de datos se está conectando? Sé que Oracle puede ser exigente con los formatos de fecha y le gusta el formato ISO 8601 .
** Nota: Vaya, acabo de leer que estás en MySQL. Simplemente formatee la fecha y pruébelo como una llamada SQL directa separada para probar.
En Python, puede obtener una fecha ISO como
Por ejemplo, a Oracle le gustan las fechas como
Dependiendo de su base de datos, si es Oracle, es posible que deba TO_DATE:
El uso general de TO_DATE es:
Si usa otra base de datos (vi el cursor y pensé en Oracle; podría estar equivocado), verifique sus herramientas de formato de fecha. Para MySQL es DATE_FORMAT () y SQL Server es CONVERT.
Además, el uso de una herramienta como SQLAlchemy eliminará diferencias como estas y le facilitará la vida.
fuente
Si solo está usando un datetime.date de python (no un datetime.datetime completo), simplemente transmita la fecha como una cadena. Esto es muy simple y me funciona (mysql, python 2.7, Ubuntu). La columna
published_date
es un campo de fecha de MySQL, la variable de Pythonpublish_date
esdatetime.date
.fuente
al ejecutar en t-sql
esto falla:
esto funciona:
manera fácil:
fuente