字段默认时间戳设置为表创建时间而不是行创建时间

时间:2013-06-24 11:23:18

标签: python postgresql datetime sqlalchemy alembic

使用SQLAlchemy,alembic和postgres,在尝试将列设置为行创建时,我最终得到的是一个默认为创建表本身时的字段,而不是创建行的时间。

型号代码:

datetime = sa.Column(sa.DateTime, nullable=False, server_default=func.now())

Alembic将其翻译为:

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

我应该怎么做,以便默认为行创建时间?

1 个答案:

答案 0 :(得分:9)

啊哈,把它解决了 - 如果你要发送一些需要在DBMS上执行的SQL,你需要告诉server_default命令:

from sqlalchemy import text

class Test(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.DateTime, server_default=text('now()'))

这会产生:

CREATE TABLE test (
    id SERIAL NOT NULL, 
    created TIMESTAMP WITHOUT TIME ZONE DEFAULT now(), 
    PRIMARY KEY (id)
)