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
使用 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