Tôi đã có một bảng SQLAlchemy được định nghĩaPostgres + SQLAlchemy chuyển đổi thời gian để tính theo giờ UTC khi sử dụng mặc định = func.now()
foo_table = Table('foo', metadata,
Column('id', Integer, primary_key=True),
Column('created_on', DateTime, default=func.now()),
...
)
mà tạo ra một bảng trong Postgres
CREATE TABLE foo
(
id serial NOT NULL,
created_on timestamp without time zone,
...
)
Các múi giờ địa phương được đặt chính xác (hãy kiểm tra xem datetime.datetime.now()
của Python có hiển thị giờ địa phương của tôi không), nhưng bất cứ khi nào tôi chèn hàng vào foo_table
mà không đặt rõ ràng created_on
, thời gian được sử dụng là UTC hiện tại thay vì giờ địa phương của tôi (ví dụ: "2015-07-29 16: 38: 08.112192 ").
Khi tôi cố gắng đặt created_on
theo cách thủ công, tất cả đều hoạt động tốt, nhưng có vẻ như Postgres hoặc SQLAlchemy đang chuyển đổi thời gian thành UTC khi để nó lên đến func.now()
để chỉ định dấu thời gian.
Làm cách nào để có thể nhận SQLAlchemy hoặc Postgres để tạo bản ghi với thời gian địa phương hiện tại của tôi?
Tôi không muốn lưu trữ thông tin múi giờ. Hệ thống nên là thời gian bất khả tri và 'func.now()' sẽ hoạt động giống như cách khởi tạo 'created_on = datetime.datetime.now()'. – orange
Tôi nghĩ rằng 'dấu thời gian không có múi giờ AT Múi giờ ZONE có thể phù hợp hơn với thời gian địa phương: http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME -ZONECONVERT – orange
Thậm chí tốt hơn, đặt dấu thời gian múi giờ mục tiêu được chuyển đổi thành được giải thích tại đây: http://serverfault.com/questions/554359/postgresql-timezone-does-not-match-system-timezone. Điều này sẽ không yêu cầu bất kỳ thay đổi mã nào. – orange