Mam tabelę sqlalchemy zdefiniowanąPostgres + sqlalchemy czasu do UTC konwersji przy użyciu default = func.now()
foo_table = Table('foo', metadata,
Column('id', Integer, primary_key=True),
Column('created_on', DateTime, default=func.now()),
...
)
która tworzy tabelę w PostgreSQL
CREATE TABLE foo
(
id serial NOT NULL,
created_on timestamp without time zone,
...
)
lokalna strefa czasowa jest ustawiona prawidłowo (zaznaczono, że Python datetime.datetime.now()
wyświetla mój czas lokalny), ale zawsze, gdy wstawiam wiersz w foo_table
bez jawnego ustawienia created_on
, użyty czas to aktualny UTC zamiast mojego lokalnego czasu (np. "2015-07-29 16: 38: 08.112192 ").
Kiedy próbuję ustawić created_on
ręcznie, wszystko działa dobrze, ale wydaje się, że Postgres lub SQLAlchemy konwertują czas na UTC, pozostawiając go do func.now()
, aby przypisać znacznik czasu.
Jak mogę uzyskać SQLAlchemy lub Postgres, aby utworzyć rekord z moim bieżącym czasem lokalnym?
Nie chcę przechowywać informacji o strefie czasowej. System powinien być agnostykiem czasowym, a 'func.now()' powinno zachowywać się tak samo, jak inicjowanie 'created_on = datetime.datetime.now()'. – orange
Myślę, że 'timestamp bez strefy czasowej w strefie strefy czasowej' może być lepszym rozwiązaniem, które wydaje się respektować czas lokalny: http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME -ZONTONVERT – orange
Jeszcze lepiej, ustaw docelowe znaczniki czasu stref czasowych są konwertowane do, jak wyjaśniono tutaj: http://serverfault.com/questions/554359/postgresql-timezone-does-not-match-system-timezone. Nie wymagałoby to żadnych zmian kodu. – orange