SQLAlchemy之commit和flush的区别对比【执行commit的时候会自动先执行flush】

官方文档参考:https://docs.sqlalchemy.org/en/13/orm/session_basics.html#session-committing

 

务必注意:只要是调用了db.session的方法都必须调用以下方法,避免异常产生,

增删改查都必须调用with db.auto_commit_db()作用域执行commit和异常回滚!

        def query_all_get_model_or_list(cls, result_field_list=None, order_by_field_list=None, is_throw=False,
                                        **kwargs):
            # 如果没有传status属性,默认会查询status=1【未删除的数据】
            UtilGlobal.check_field_not_exist_dict_add_attr(kwargs, "status", 1)
            with db.auto_commit_db():
                models = db.session.query(*(result_field_list or [cls])).filter_by(**kwargs).order_by(
                    *(order_by_field_list or [cls.create_time.desc()])).all()
                UtilGlobal.check_is_exist(models, is_throw=is_throw, err_prompt=f"数据库查询结果为models={models}")
            return models
"""
    功能:封装一个类让SQLAlchemy的回滚,同时兼容Python-SQLAlchemy和Flask-SQLAlchemy
"""
from contextlib import contextmanager


class OwnDBSessionRollback:
    def __init__(self, db_session):
        self.session = db_session

    @contextmanager
    def auto_commit_db(self):
        """
            功能:利用contextmanager管理器,对try/except语句封装,使用的时候必须和with结合!!!
        """
        try:
            yield
            self.session.commit()
        except Exception as e:
            # 加入数据库commit提交失败,必须回滚!!!
            print(f"由于本次mysql请求连接失败,出现了异常,强制执行事务回滚,具体异常原因如下:{e}")
            self.session.rollback()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值