Ho un tavolo SQLAlchemy che è definitaPostgres + SQLAlchemy conversione tempo di UTC quando si utilizza di default = func.now()
foo_table = Table('foo', metadata,
Column('id', Integer, primary_key=True),
Column('created_on', DateTime, default=func.now()),
...
)
che crea una tabella in Postgres
CREATE TABLE foo
(
id serial NOT NULL,
created_on timestamp without time zone,
...
)
Il il fuso orario locale è impostato correttamente (controllato che il datetime.datetime.now()
di Python visualizzi l'ora locale), ma ogni volta che inserisco una riga in foo_table
senza impostare esplicitamente created_on
, il tempo utilizzato è l'ora UTC corrente anziché locale (ad esempio "2015-07-29 16: 38: 08,112192").
Quando provo a impostare manualmente created_on
, tutto funziona correttamente, ma sembra che Postgres o SQLAlchemy stiano convertendo l'ora in UTC quando lo si lascia fino a func.now()
per assegnare un timestamp.
Come posso ottenere SQLAlchemy o Postgres solo per creare un record con l'ora locale corrente?
Non voglio memorizzare le informazioni sul fuso orario. Il sistema dovrebbe essere agnostico nel fuso orario e 'func.now()' dovrebbe comportarsi allo stesso modo dell'inizializzazione 'created_on = datetime.datetime.now()'. – orange
Penso che "data/ora senza fuso orario A ZONA FUSO ZONA" potrebbe essere una misura migliore che sembra rispettare l'ora locale: http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME -ZONECONVERT – orange
Ancora meglio, imposta i timestamp del fuso orario di destinazione come vengono convertiti come spiegato qui: http://serverfault.com/questions/554359/postgresql-timezone-does-not-match-system-timezone. Ciò non richiederebbe alcuna modifica al codice. – orange