SQLAlchemy 中一行的创建时间戳

Creation timestamp of a row in SQLAlchemy

使用 SQLAlchemy ORM,有什么好的方法可以记录记录的创建时间,而不会在后续更新时覆盖创建时间?

这是一个示例 table 定义:

class Car:
    model = Column(String, primary_key=True)
    latest_model_year = Column(Integer)
    created = Column(DateTime)

我想使用此代码 add/update 数据库中的汽车行:

car = Car(
    model = 'Accord',
    latest_model_year = 2022,
)
session.merge(car)

...但是在插入新行时不会设置 created 列。

我可以这样做:

if session.query(Car).filter(Car.model=='Accord').first():
    # this car already exists, so update the existing row
    car = Car(
        model = 'Accord',
        latest_model_year = 2022,
    )
    session.merge(car)
else:
    # this car does not exist, so create a new row
    car = Car(
        model = 'Accord',
        latest_model_year = 2022,
        created = datetime.now(),
    )
    session.add(car)

...但是这是很多重复的代码。有没有更好的方法?

尝试:

from sqlalchemy.sql import func

class Car:
    model = Column(String, primary_key=True)
    latest_model_year = Column(Integer)
    created = Column(DateTime, default=func.now())  # <- HERE

文档:Client-Invoked SQL Expressions