Necesito insertar filas en PG uno de los campos es fecha y hora con marca de tiempo, este es el momento del incidente, por lo que no puedo usar -> current_timestamp función de Postgres en el momento de la inserción, entonces ¿cómo puedo luego insertar la hora y la fecha que recolecté antes en la fila pg en el mismo formato que habría sido creado por current_timestamp en ese momento?Cómo insertar current_timestamp en Postgres a través de python
Respuesta
Una marca de tiempo no tiene "un formato".
La forma recomendada de tratar con las marcas de tiempo es utilizar un Estado Preparado en el que acaba de pasar un marcador de posición en el SQL y pasar un objeto "real" a través de la API de su lenguaje de programación. Como no conozco Python, no sé si admite PreparedStatements y cómo sería la sintaxis para eso.
Si desea poner un literal de marca de tiempo en su SQL generado, deberá seguir algunas reglas de formato al especificar el valor (un literal tiene un formato).
El método de Ivan funcionará, aunque no estoy 100% seguro si depende de la configuración del servidor de PostgreSQL.
Una configuración (y el idioma) solución independiente para especificar una marca de tiempo literal es el estándar ANSI SQL:
INSERT INTO some_table
(ts_column)
VALUES
(TIMESTAMP '2011-05-16 15:36:38');
Sí, esa es la palabra clave TIMESTAMP
seguido de una marca de tiempo con formato de estilo ISO (la palabra clave TIMESTAMP
define que formato)
La otra solución sería utilizar la función to_timestamp()
donde puede especificar el formato del literal de entrada.
INSERT INTO some_table
(ts_column)
VALUES
(to_timestamp('16-05-2011 15:36:38', 'dd-mm-yyyy hh24:mi:ss'));
Claro, simplemente pase un valor de cadena para esa columna timestamp en el formato: '2011-05-16 15:36:38'
(también puede agregar una zona horaria allí, como 'PST'
). PostgreSQL convertirá automáticamente la cadena en una marca de tiempo. Ver http://www.postgresql.org/docs/9.0/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT
El uso justo 'ahora'
http://www.postgresql.org/docs/8.0/static/datatype-datetime.html
'now' es exactamente lo mismo que' current_timestamp' –
exactamente lo mismo, excepto que no lanza el error. – anthropomo
El OP explícitamente preguntó cómo hacer esto * a través de Python *. –
Fecha y hora de entrada es aceptada en casi cualquier formato razonable, incluyendo ISO 8601, tradicionales, POSTGRES compatible con SQL, y otros. Para algunos formatos, el orden de entrada de fecha de mes, día y año es ambiguo y hay soporte para especificar el orden esperado de en estos campos.
En otras palabras: simplemente escriba cualquier cosa y funcionará.
O marque this table con todos los formatos inequívocos.
Sólo tiene que utilizar
ahora()
o
CURRENT_TIMESTAMP
prefiero este último, ya que no gusta tener paréntesis adicional, pero eso es sólo personales preferencia.
La pregunta especifica: "No puedo usar -> función current_timestamp de Postgres en el momento de la inserción". –
Si utiliza psycopg2
(y posiblemente alguna otra biblioteca de cliente), puede simplemente pasar una datetime
objeto de Python como parameter a una consulta SQL:
from datetime import datetime
dt = datetime.now()
cur.execute('INSERT INTO some_table (somecol) VALUES (%s)', (dt,))
Más tipos de Python que se puede adaptar a SQL (y devuelto como objetos de Python cuando se ejecuta una consulta) se enumeran here.
debe evitar pasar un objeto naive datetime que representa la hora local: puede ser ambiguo y la conexión db puede usar una zona horaria diferente. Utilice un objeto de fecha y hora conocido como 'datetime.now (timezone.utc)' y asegúrese de que "timestamp with timezone" se use en el lado de db. – jfs
puede probar esto,
from datetime import datetime as dt
then use this in your code:
cur.execute('INSERT INTO my_table (dt_col) VALUES (%s)', (dt.now(),))
- 1. Insertar en MongoDB a través de Node.js
- 2. Postgres gatillo después de insertar el acceso a nuevos
- 3. Seleccionar e insertar a través de dblink
- 4. Oracle current_timestamp to seconds conversion
- 5. ¿Cómo hacer "seleccionar current_timestamp" en hsqldb?
- 6. insertar datos en la base de datos de MS Access con ADO a través de Python
- 7. Postgres distribuyendo datos a través de múltiples discos
- 8. Shift + Volver a insertar linebreak en python
- 9. Pasar datos de Python a JavaScript a través de Django
- 10. Insertar enlace URL en SMS a través de PHP
- 11. ¿Recreando COPIA de Postgres directamente en Python?
- 12. loop a través de kwargs en python
- 13. ¿Cómo ejecutas una aplicación Twisted a través de Python (en lugar de a través de Twisted)?
- 14. DE ACTUALIZACIÓN CURRENT_TIMESTAMP y JPA
- 15. python postgres cursor timestamp número
- 16. ¿Hay alguna manera de insertar a través de Graph API?
- 17. Desde ahora() para CURRENT_TIMESTAMP en PostgreSQL
- 18. ¿Cómo recibir argumentos a través de shell pipe en python?
- 19. ¿Cómo puedo iterar a través de una cadena en Python?
- 20. cómo compartir variables globales a través de subprocesos en python?
- 21. tubería postgres COPIA en python con psycopg2
- 22. Interfaz de Python a Postgres con declaraciones reales preparadas?
- 23. ¿Cómo obtengo las claves principales de una tabla de Postgres a través de plpgsql?
- 24. Ejecutando programas Java a través de Python
- 25. Insertar objeto python en mongodb
- 26. Evite insertar valores "nulos" en la tabla de la base de datos a través de JPA
- 27. Cómo ejecutar un comando de shell a través de Python
- 28. Python Iterate a través de los caracteres
- 29. campo Query bytea en postgres a través de la línea de comando
- 30. Lecturas sucias en Postgres
gracias this -> format ('Y-m-d H: i: s'); está trabajando para mí –