From 6bfb10e4a409966ab7439ed5adf3cfabece354e2 Mon Sep 17 00:00:00 2001 From: mkg <1650473152@qq.com> Date: Tue, 7 Dec 2021 15:39:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8C=96=EF=BC=88=E6=A0=B9=E6=8D=AEorm=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=EF=BC=89=E6=96=B9=E6=B3=95=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=BD=AF=EF=BC=88=E9=80=BB=E8=BE=91=EF=BC=89=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/common/curd.py | 41 ++++++++++++++++++++++ applications/extensions/init_sqlalchemy.py | 8 +++++ 2 files changed, 49 insertions(+) diff --git a/applications/common/curd.py b/applications/common/curd.py index 90319b3..9a4f16c 100644 --- a/applications/common/curd.py +++ b/applications/common/curd.py @@ -1,6 +1,47 @@ +import datetime + +from marshmallow import Schema +from marshmallow_sqlalchemy import SQLAlchemyAutoSchema + from applications.extensions import db, ma +class LogicalDeleteMixin(object): + """ + class Test(db.Model,LogicalDeleteMixin): + __tablename__ = 'admin_test' + id = db.Column(db.Integer, primary_key=True, comment='角色ID') + + Test.query.filter_by(id=1).soft_delete() + Test.query.logic_all() + """ + create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间') + update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间') + delete_at = db.Column(db.DateTime, comment='删除时间') + + +def auto_model_jsonify(data, model: db.Model): + """ + 不需要建立schemas,直接使用orm的定义模型进行序列化 + 基本功能,待完善 + 示例 + power_data = curd.auto_model_jsonify(model=Dept, data=dept) + """ + def get_model(): + return model + + class AutoSchema(SQLAlchemyAutoSchema): + class Meta(Schema): + model = get_model() + include_fk = True + include_relationships = True + load_instance = True + + common_schema = AutoSchema(many=True) # 用已继承ma.ModelSchema类的自定制类生成序列化类 + output = common_schema.dump(data) + return output + + def model_to_dicts(schema: ma.Schema, data): """ :param schema: schema类 diff --git a/applications/extensions/init_sqlalchemy.py b/applications/extensions/init_sqlalchemy.py index 2c58af1..ed9fdc0 100644 --- a/applications/extensions/init_sqlalchemy.py +++ b/applications/extensions/init_sqlalchemy.py @@ -1,3 +1,5 @@ +import datetime + from flask import Flask, request from flask_sqlalchemy import SQLAlchemy, BaseQuery from flask_marshmallow import Marshmallow @@ -47,6 +49,12 @@ fields.Boolean.default_error_messages = { class Query(BaseQuery): + def soft_delete(self): + return self.update({"delete_at": datetime.datetime.now()}) + + def logic_all(self): + return self.filter_by(delete_at=None).all() + def layui_paginate(self): """ layui表格分页