python - with - timestamp postgresql
Cómo insertar current_timestamp en Postgres a través de python (7)
Necesito insertar filas en PG. Uno de los campos es fecha y hora con marca de tiempo, este es el momento del incidente, así que no puedo usar -> current_timestamp function de Postgres en el momento de la inserción, entonces, ¿cómo puedo 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.
La entrada de fecha y hora se acepta en casi cualquier formato razonable, incluidos ISO 8601, compatibles con SQL, POSTGRES tradicionales y otros. Para algunos formatos, el orden de mes, día y año en la entrada de fecha es ambiguo y hay soporte para especificar el orden esperado de estos campos.
En otras palabras: simplemente escribe cualquier cosa y funcionará.
O compruebe esta tabla con todos los formatos inequívocos.
Claro, simplemente pase un valor de cadena para esa columna de marca de hora 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 a una marca de tiempo. Consulte http://www.postgresql.org/docs/9.0/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT
Si usa psycopg2
(y posiblemente alguna otra biblioteca cliente), simplemente puede pasar un objeto datetime
Python como un parameter a una consulta SQL:
from datetime import datetime
dt = datetime.now()
cur.execute(''INSERT INTO some_table (somecol) VALUES (%s)'', (dt,))
Aquí se enumeran más tipos de Python que pueden adaptarse a SQL (y devolverse como objetos de Python cuando se ejecuta una consulta).
Solo usa ''ahora''
http://www.postgresql.org/docs/8.0/static/datatype-datetime.html
Solo usa
ahora()
o
FECHA Y HORA ACTUAL
Prefiero este último ya que me gusta no tener paréntesis adicional, sino que es solo una preferencia personal.
Una marca de tiempo no tiene "un formato".
La forma recomendada de lidiar con las marcas de tiempo es usar una declaración preparada en la que simplemente pase un marcador de posición en el SQL y pase un objeto "real" a través de la API de su lenguaje de programación. Como no sé Python, no sé si es compatible con PreparedStatements y cómo sería la sintaxis de 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 de si depende de la configuración del servidor PostgreSQL.
Una solución independiente de configuración (y lenguaje) para especificar un literal de marca de tiempo 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
seguida de una marca de hora formateada en estilo ISO (la palabra clave TIMESTAMP
define ese 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''));
from datetime import datetime as dt
entonces usa esto en tu código:
cur.execute(''INSERT INTO my_table (dt_col) VALUES (%s)'', (dt.now(),))