数据库的监听和文件监控

参考均来源链接地址:

event钩子函数(指定操作后自动触发执行)

https://www.cnblogs.com/yasmi/p/5056089.html

2021-03-19Sqlalchemy钩子Event - 简书

官方文档ORM Events — SQLAlchemy 2.0 Documentation

sqlalchemy触发器的使用-Event_sqlalchemy 事件-CSDN博客

一般应用示例:

Flask-SQLAlchemy事件钩子介绍_sqlalchemy 触发器-CSDN博客

事件类型:

  • 会话事件:比如执行更新删除语句事件,生命周期事件。

  • 映射事件:指将用户定义的类映射到Table的事件。

  • 实例事件:ORM映射实例的构造事件。

  • 属性事件:在ORM映射对象的各个属性上发生时触发,上面例子就是该事件。

  • 查询事件:构造Query对象时触发。

#coding:utf8

from sqlalchemy.orm import scoped_session
from sqlalchemy import Column, Integer, String, DateTime, TIMESTAMP, DECIMAL, func, Text, or_
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy import ForeignKey, Boolean, create_engine, MetaData, Constraint
from sqlalchemy.orm import relationship, backref, sessionmaker
from sqlalchemy import event


Base = declarative_base()




class Role(Base):#  一
    __tablename__= 'roles'
    id = Column(Integer,primary_key=True)
    name = Column(String(36),nullable=True)
    users = relationship('User',backref='role')

class User(Base):#  多
    __tablename__ = 'users'
    id = Column(Integer,primary_key=True)
    name = Column(String(36),nullable=True)
    role_id = Column(Integer, ForeignKey('roles.id'))


class Database():
    def __init__(self, bind, pool_size=100, pool_recycle=3600, echo=False):
        self.__engine = create_engine(bind,pool_size=pool_size,
                                   pool_recycle=pool_recycle,
                                   echo=echo)
        self.__session_factory = sessionmaker(bind=self.__engine)
        self.__db_session = scoped_session(self.__session_factory)
        Base.metadata.create_all(self.__engine)

    @property
    def session(self):
        return self.__db_session()


def on_created(target, value, initiator):
    print "received append event for target: %s" % target



@event.listens_for(User, 'after_insert')
def receive_after_insert(mapper, connection, target):
    print mapper
    print connection
    print target.id
    print "insert......."

db = Database(bind="mysql+pymysql://root:xxxx@localhost/mydata?charset=utf8")





if __name__ == "__main__":
    user = User()
    user.name = "123"
    user.role_id=2
    db.session.add(user)
    db.session.commit()


watchdog(文件或者文件夹的创建、删除、移动和修改)

Python Watchdog:高效的文件系统监控-CSDN博客

https://www.cnblogs.com/root-123/p/16720860.html

主要用法示例:

import sys
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler, FileSystemEventHandler

if __name__ == "__main__":
    # 设置日志信息格式
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    # 要监控的目录路径
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    # 创建一个日志事件处理程序
    event_handler = LoggingEventHandler()
    filesystemhandler = FileSystemEventHandler()
    # 创建一个观察者对象
    observer = Observer()
    # 声明一个定时任务
    #对应变量表示FileSystemEvent类句柄或者子类,监控的文件路径,是否子文件夹遍历
    #observer.schedule(event_handler, path, recursive=True)
    observer.schedule(filesystemhandler, path="Project/", recursive=True)
    # 启动定时任务
    observer.start()
    try:
        while observer.is_alive():
            observer.join(1)
    finally:
        #关闭任务
        observer.stop()
        observer.join()

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值