参考均来源链接地址:
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()