es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

python psycopg2 cambió el formato de fecha.

Cuando selecciono esto en psql

select ts_changed, to_char(ts_changed, 'YYYY-MM-DD HH24:MI:SS.MS') 
from ...

Obtengo este formato.

  • 2022-01-05 14:51:11.334

En un script de Python con psycopg obtengo esto.

  • 2022-01-05 14:49:05.777000

psycopg ha agregado tres dígitos más que no quiero, porque causa problemas con Elasticsearch. Aquí está mi consulta.

pg_initconnect = 'host={} dbname={} user={}'.format(db_host, db_db, db_user)
pg_connect = psycopg2.connect(pg_initconnect)

do_sql = pg_connect.cursor()
do_sql.execute(db_query)
result = do_sql.fetchall()
pg_connect.commit()
return(result)

¿Cómo le digo a psycopg que devuelva la fecha correcta?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes cambiar el formato de fecha devuelto por psycopg especificando un tipo de conversor personalizado. En este caso, quieres usar el tipo timestamp y formatearlo como YYYY-MM-DD HH24:MI:SS.MS. Así es cómo hacerlo:

    import psycopg2.extras
    
    def timestamp_typecast(value, cursor):
        # Utiliza el conversor de tipo timestamp por defecto
        ts = psycopg2.extras.TimestampFromTicks(value, cursor)
    
        # Formatea el timestamp como YYYY-MM-DD HH24:MI:SS.MS
        return ts.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
    
    # Conéctate a postgres
    pg_init_connect = 'host={} dbname={} user={}'.format(db_host, db_db, db_user)
    pg_connect = psycopg2.connect(pg_init_connect)
    
    # Registra el conversor de tipo
    psycopg2.extras.register_type(psycopg2.extensions.TIMESTAMP, timestamp_typecast)
    
    # Ejecuta la consulta
    do_sql = pg_connect.cursor()
    do_sql.execute(db_query)
    result = do_sql.fetchall()
    pg_connect.commit()
    
    # Ahora el resultado tendrá el formato 'YYYY-MM-DD HH24:MI:SS.MS'
    return result
    

    Este código registra un conversor de tipo timestamp personalizado que formatea el timestamp como YYYY-MM-DD HH24:MI:SS.MS. Este conversor de tipo se utiliza entonces para todos los timestamps devueltos por psycopg en la sesión actual.

Comments are closed.