使用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
我应该怎么做,以便默认为行创建时间?
答案 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)
)