有没有可能在SQLAlchemy中创建一个列,该列在上次插入/更新时会自动填充时间?

我创建了模型,继承自基类

class Base(object):
    def __tablename__(self):
        return self.__name__.lower()
    id = Column(Integer, primary_key=True)
    last_time = Column(TIMESTAMP, server_default=func.now())

Base = declarative_base(cls=Base)

class EntityModel(Base):
    __tablename__ = 'entities'
    settlement_id = Column(Integer, ForeignKey('settlements.id'), nullable=False)
    type = Column(String(20), nullable=False)
    level = Column(Integer, nullable=False, default=0)
    energy = Column(Float, nullable=False, default=0)
    position_x = Column(Integer, default=0)
    position_y = Column(Integer, default=0)

    def __repr__(self):
        return "<Entity('%s')>" % (self.type)

每次我更新EntityModel时,我都想在system function.now()上更新last_time.我可以用触发器在数据库级别上完成这项工作,但如果可能的话,我更愿意在应用程序级别上完成.

推荐答案

在基类中,在最后一条语句中添加onupdate,如下所示:

from sqlalchemy.sql import func

last_time = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp())

Python-3.x相关问答推荐

模型中的__str__方法在Django管理面板中生成大量重复查询

根据第一个字典的值序列对第二个字典进行排序

msg-seviri l1.5本机文件

使用 iloc 或 loc 对多列进行过滤

需要找到完全匹配并使用正则表达式替换

如何在 histplot 中标记核密度估计

asyncio.as_completed() 应该接受 `Iterable`,但如果输入是 `Generator` 就会崩溃?

将 pandas Timestamp() 转换为 datetime.datetime() 以支持 peewee DateTimeField()

以编程方式映射 uniprot ID 时如何解决 400 客户端错误?

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

SqlAlchemy - 从 oracle db 中检索长文本

列表中的重复数字与列表理解

Dask worker post-processing

没有可重定向到的 URL.提供一个 url 或在模型上定义一个 get_absolute_url 方法

Pytorch 的随机 Select ?

创建一个可旋转的 3D 地球

如何从另一个目录导入 python 包?

如何调试垂死的 Jupyter Python3 内核?

Tensorflow:ImportError:libcudnn.so.7:无法打开共享对象文件:没有这样的文件或目录

Asyncio RuntimeError:事件循环已关闭