使用 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
我应该怎么做才能让默认的行创建时间?
最佳答案
啊哈,解决了——如果您要发送一些需要在 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)
)
关于python - 字段默认时间戳设置为表创建时间而不是行创建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17274282/