嘗試將列設置爲行創建時間時,使用SQLAlchemy,alembic和postgres,我最終得到的是一個字段,該字段默認爲表本身的時間被創建,而不是創建行的時間。設置爲表創建時間而不是行創建時間的字段默認時間戳
型號代碼:
datetime = sa.Column(sa.DateTime, nullable=False, server_default=func.now())
蒸餾器將其轉換爲:
sa.Column('datetime', sa.DateTime(), server_default='now()', nullable=False),
,在Postgres裏列:
datetime | timestamp without time zone | not null default '2013-06-24 11:28:14.930524'::timestamp without time zone
我應該怎麼做,這樣的默認值是行創作時間?
而不是提交一個正確的答案,你可以嘗試'server_default = func.now'而不是'server_default = func.now()。 – Doobeh
@Doobeh:我想到了這一點,它將有意義,因爲它打算傳遞的是一個函數而不是一個值,但似乎調用該函數是在SQLAlchemy中執行的方式。嘗試觸發以下錯誤:sqlalchemy.exc.ArgumentError:參數'arg'預計爲''或''或'< class'sqlalchemy.sql.expression.TextClause'>',得到了'
在黑暗中有一點點 - 我習慣使用'default = datetime .now'描述我的時間戳列。我發現(並測試)了一個使用'server_default'的解決方案,我將作爲答案離開。 – Doobeh