sqlalchemy——@listens_for

  • 问:sqlalchemy如何实现:表中指定数据更新时,其time字段自动更新?
  • 答:使用listens_for 装饰器来注册事件监听器,确保在项目数据更新时触发相应的处理逻辑。

示例代码如下:

python 复制代码
# coding: utf-8
import datetime

from sqlalchemy.event import listens_for
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, String

Base = declarative_base()
'''
    项目表
'''

class ProjectTable(Base):
    __tablename__ = 'project'
    # 项目id
    id = Column(String(32), primary_key=True)
    # 项目名称
    name = Column(String(255))
    # 项目说明
    explain = Column(String(255))
    # 项目类型
    type = Column(String(20))
    # 更新时间
    time = Column(String(20), default=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

    def __repr__(self):
        table = "project(id={}, name={}, explain={},time={},type={})"
        return table.format(self.id, self.name, self.explain, self.time, self.type)

    # 将查询结果转换为Json
    def to_json(self):
        _dict = self.__dict__
        if "_sa_instance_state" in _dict:
            del _dict["_sa_instance_state"]
        return _dict
# 添加监听,当数据更新时,自动更新time字段
@listens_for(ProjectTable, 'before_update')
def before_update_listener(mapper, connection, target):
    target.time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
相关推荐
SatVision炼金士2 分钟前
SDK管理本地java版本
java·开发语言·sdkman
奕成则成3 分钟前
Python 创建虚拟环境
开发语言·python
独自破碎E7 分钟前
什么时候@Async会失效?
java·开发语言
山峰哥9 分钟前
SQL调优实战指南:从索引设计到高并发场景优化全链路解析
大数据·汇编·数据库·sql·编辑器·区块链
zbguolei10 分钟前
上传 Excel 文件进行数据库比对
数据库·excel
+VX:Fegn089515 分钟前
计算机毕业设计|基于springboot + vue在线教育学习系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·学习·课程设计
KG_LLM图谱增强大模型17 分钟前
企业级实用本体论及构建指南系列(1/4):Palantir 数据建模的哲学与实践
数据库·oracle·palantir
军军君0118 分钟前
Three.js基础功能学习四:摄像机与阴影
开发语言·前端·javascript·3d·typescript·three·三维
Morwit23 分钟前
如何使用CMake构建Qt新项目
开发语言·c++·qt
独自破碎E26 分钟前
Leetcode1499满足不等式的最大值
java·开发语言