orm/事务/session 规范

 

0、 ORM join使用规范示例

0.1 不允许超过两张表进行join操作

0.1.1 问题描述

0.1.2 问题复现示例

0.1.3 问题解决方案及结果对比

 

一、orm使用规范

1、事务中同时包含读写操作时, 要保证写操作在最后执行

1.1、问题描述

在同一个事务里执行select操作会把数据flush到db,  但由于事务的隔离级别,导致其他事务并不能查到此数据,   直到commit之后才可以看到

这可能会导致一些查询事务跳过后commit的数据

1.2、问题复现示例

1.2.1、screen_subject_version表:  只需要关注id即可, 其他数据不关心

 

1.2.2、事务A: 不断查询screen_subject_version表, 解析查到的数据, 保存最新的version.id

    def sync_versions(version, cid, screen_group_id, device_id):
        """增量同步"""
        versions = ScreenSubjectVersion.query. \
            filter(ScreenSubjectVersion.company_id == cid, ScreenSubjectVersion.id > version) \
            .order_by(ScreenSubjectVersion.id.asc()).all()

        latest_version = versions[-1].id if versions else 0
        data = {'group_list': [], 'version': str(latest_version)}

        for v in versions:
            # 解析version数据, 构造返回值data, 逻辑省略
       
        return data

1.2.3、事务B: 包含读写的复杂事务, 批量插入version表, 再查询其他数据,最后commit

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值