flask_sqlalchemy event监听查询事件

news/2024/12/20 1:02:55/

flask_sqlalchemy event监听查询事件
在Flask-SQLAlchemy中,可以使用事件监听器来监控查询事件。这可以通过@listens_for(ModelClass, “event_name”)装饰器来实现,其中ModelClass是你想要监控的模型类,event_name是你想要监控的事件名称,例如’before_insert’、‘after_insert’、'before_update’等。

python">class User(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50))
# 监听模型创建事件
@event.listens_for(db.Model, 'after_insert')
def after_user_insert(mapper, connection, target):print(f'User {target.name} created')# 监听模型删除事件
@event.listens_for(User, 'after_delete')
def after_user_delete(mapper, connection, target):print(f'User {target.name} deleted')
python">from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import event
from sqlalchemy.orm import mapperapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True)email = db.Column(db.String(120), unique=True)@event.listens_for(User, 'before_insert')
def before_user_insert(mapper, connection, user):print("Before User Insert: ", user.username)@event.listens_for(User, 'after_insert')
def after_user_insert(mapper, connection, user):print("After User Insert: ", user.username)# 创建数据库表
db.create_all()# 使用模型类添加用户
user = User(username='john_doe', email='john@example.com')
db.session.add(user)
db.session.commit()
python">from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.event import listens_for
from flask import Flaskapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
db = SQLAlchemy(app)class MyModel(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50))def __repr__(self):return f"MyModel({self.name})"@listens_for(db.session, "after_attach")
def after_attach(session, instance):if isinstance(instance, MyModel):print(f"Querying MyModel: {instance}")if __name__ == "__main__":db.drop_all()db.create_all()# 创建一个模型实例m = MyModel(name='test')db.session.add(m)db.session.commit()# 查询时会触发上面定义的事件print("Querying all MyModels:")for model in MyModel.query.all():print(model)

http://www.ppmy.cn/news/1556522.html

相关文章

运维 mysql、redis 、RocketMQ性能排查

MySQL查看数据库连接数 1. SHOW STATUS命令-查询当前的连接数 MySQL 提供了一个 SHOW STATUS 命令,可以用来查看服务器的状态信息,包括当前的连接数。 SHOW STATUS LIKE Threads_connected;这个命令会返回当前连接到服务器的线程数,即当前…

推送本地仓库到远程git仓库

目录 推送本地仓库到远程git仓库1.1修改本地仓库用户名1.2 push 命令1.3远程分支查看 推送本地仓库到远程git仓库 删除之前的仓库中的所有内容,从新建库,同时创建一个 A.txt 文件 清空原有的远程仓库内容,重新创建一个新的仓库,…

[x86 ubuntu22.04]投影模式选择“只使用外部”,外部edp屏幕无背光

1 问题描述 CPU:G6900E OS:ubuntu22.04 Kernel:6.8.0-49-generic 系统下有两个一样的 edp 屏幕,投影模式选择“只使用外部”,内部 edp 屏幕灭,外部 edp 屏幕无背光。DP-1 是外部 edp 屏幕,eDP-1…

Redis内存淘汰策略有哪些

Redis内存淘汰策略有哪些 简单来说: volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 volatile-ttl:-------------------要…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…

ubuntu server 安装

1 获取ubuntu https://ubuntu.com/download/server 2 安装ubuntu 详细教程查看视频: ubunut server 安装_哔哩哔哩_bilibili

如何搭建政务服务网站?政务服务网站包含哪些内容?

政务网致力于向公众提供政府工作的相关信息、政策法规的公开和解读,促进政府与公众之间的沟通与互动。公众可以随时随地通过网站了解到当地政府工作的政策方向、政策公告、行政许可和公共服务等相关信息。 一、在政府网站的建设中,有几个关键方面需要重点关注&#…

Sql注入(靶场)14-20关

第十四关 跟上面一样闭合换成" 第一步查询库名 " and updatexml(1,concat(1,(select database())),1)# 第二步查询表名 " and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)),1)# 第…