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 |