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

标签 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

我应该怎么做才能让默认的行创建时间?

最佳答案

啊哈,解决了——如果您要发送一些需要在 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/

相关文章:

postgresql - 将足够多的参数传递给lib/pq

perl - 如何在 Perl 中将字符串解析为 DateTime 对象?

python - 如何将儒略日期转换为日历日期?

python - 设置 Kivy 弹出窗口格式以消除弹出窗口背景

python - 将 imshow 与用户输入相结合

python - 使用 Python 的季节性 ARIMA,freq H 不明白?

sql - PostgreSQL:LIMIT + ORDER 返回不一致的结果

linux - 如果找到零行,psql 返回代码

python - 降低 seaborn 线图上日期的 x 轴值密度

python - 从作为守护进程运行的 python 脚本中解压缩文件时出错