大型系统、海量数据肯定涉及到分库分表这些提高效率的手段。由于sqlalchemy的orm思想是一张表对应一个对象,那么当我们有N张相同结构只是表名有区别的分表,sqlalchemy orm怎样处理呢。比如有如下表:

CREATE TABLE `goods_desc_0` ( `goods_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '商品id', `goods_desc` text NOT NULL COMMENT '商品详细描述', PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品信息详情' CREATE TABLE `goods_desc_1` ( `goods_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '商品id', `goods_desc` text NOT NULL COMMENT '商品详细描述', PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品信息详情'
class GoodsDesc(db.Model): __tablename__ = 'goods_desc' goods_id = db.Column(db.Integer, primary_key=True) goods_desc = db.Column(db.Text, default=None) def __str__(self): return "GoodsDesc => { \ goods_id:%d, goods_desc:'%s'}" % ( self.goods_id, self.goods_desc) __repr__ = __str__ # 代码示例 goods_id = 101 table_index = goods_id%2 table_name = 'goods_desc_%d' % table_index GoodsDesc.__table__.name = table_name gd = GoodsDesc.query.filter(GoodsDesc.goods_id == goods_id).first() # 这样写虽然也能工作,但是是非常危险的,因为GoodsDesc.__table__是静态全局变量, # 而且不是web程序request级别的,是app context的,非常不安全。

经过N次Google,终于找到解决方案,而且代码写起来也很优雅。代码如下:

class GoodsDesc(object): _mapper = {} @staticmethod def model(goods_id): table_index = goods_id%100 class_name = 'GoodsDesc_%d' % table_index ModelClass = GoodsDesc._mapper.get(class_name, None) if ModelClass is None: ModelClass = type(class_name, (db.Model,), { '__module__' : __name__, '__name__' : class_name, '__tablename__' : 'goods_desc_%d' % table_index, 'goods_id' : db.Column(db.Integer, primary_key=True), 'goods_desc' : db.Column(db.Text, default=None), }) GoodsDesc._mapper[class_name] = ModelClass cls = ModelClass() cls.goods_id = goods_id return cls # 外部代码调用如例如下: # ----------------------- # 新增插入 gdm = GoodsDesc.model(goods_id) gdm.goods_desc = 'desc' db.session.add(gd) # 查询 gdm = GoodsDesc.model(goods_id) gd = gdm.query.filter_by(goods_id=goods_id).first()

flask-sqlalchemy分表解决方案相关推荐

  1. 数据库分库分表解决方案

    数据库分库分表解决方案 前言 MySQL表大小限制 分表方案 垂直分表 水平分表 按月分表 MySQL分区表 分库方案 按业务分库 按表分库 拆分后的问题及常见的解决方案 垂直拆分 跨库Join问题 ...

  2. 数据库分库分表解决方案汇总

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | butterfly100 来源 | cnblo ...

  3. mysql 横向分表合并_MySQL横向扩展-分库分表解决方案总结

    从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...

  4. 分库分表解决方案之MyCat

    本文来说下分库分表的解决方案之MyCat 文章目录 概述 分布式数据存储与Mycat Mycat架构介绍 Mycat核心概念及配置 本文小结 概述 近今年里随着经济的飞速发展,企业的业务也在不断膨胀, ...

  5. 分库分表解决方案之ShardingSphere

    本文来说下ShardingSphere中间件是如何来解决分库分表问题的 文章目录 概述 Sharding-JDBC简介 与常见开源产品对比 实现原理 分片规则配置 JDBC规范重写 SQL解析 SQL ...

  6. mysql 分表后如何扩展_MySQL横向扩展-分库分表解决方案总结

    从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...

  7. MySQL分库分表解决方案

    一.数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降严 ...

  8. ShardingSphere 5.0.0-alpha 分库分表解决方案(五)——读写分离

    文章目录 1. ShardingSphere-JDBC 读写分离 1.1 环境搭建 1.1.1 pom.xml 1.1.2 创建数据库和表 1.1.3 编写业务代码 1.1.4 配置文件 1.1.5 ...

  9. flask sqlalchemy 单表查询

    主要内容: 1 sqlalchemy: 一个python的ORM框架 2 使用sqlalchemy 的流程: 创建一个类 创建数据库引擎 将所有的类序列化成数据表 进行增删改查操作 # 1.创建一个 ...

最新文章

  1. 说几个著名的死循环:
  2. c语言程序设计中北大学,《中北大学软件学院2013届C语言程序设计实训题目.doc...
  3. flink网页端提交pr-修改文档报错
  4. 打开mysql的远程连接_开启mysql的远程访问权限
  5. 2010-12-1至2011-06-11
  6. 【74HC595】STM32 74HC595驱动程序
  7. Unity 游戏框架搭建 2018(八)小结
  8. 什么是DOM(个人理解)
  9. 什么是3C认证?3C认证的介绍
  10. Oracle--ORA-01775: 同义词的循环链
  11. 计算机设计大赛数媒民族元素类,北京工业大学艺术设计学院
  12. 京东裁员10%的高管
  13. 如何查看Win11的CUDA版本
  14. postman测试接口成功,实际发请求时失败
  15. BERT: Pre-training of Deep Bidirectional Transformers for Language Understading
  16. 加州旅馆 Hotel California (The Eagles)
  17. mac 下 vimrc 配置
  18. 通达OA2019数据库链接超时,应用中心报错的解决办法
  19. C++细节 输出运算符的重载为什么不写成类的成员函数
  20. cmd命令解密Bitlocker

热门文章

  1. 大学计算机基础基础部分试题及答案,大学计算机基础试题及答案,等级考网络部分...
  2. 第四版源码技术导航网自适应
  3. C#利用委托实现窗体间的值传递
  4. C# 实现软件自动更新升级程序
  5. 4.9 利用对应的泛型替换Hashtable[转]
  6. CyberArticle和Live Writer的比较
  7. shell循环,判断介绍,以及实例
  8. PHP中功能强大却少使用的函数 -- 为你提供更多的思路
  9. 19.删除链表的倒数第N个节点
  10. centos7 安装MyCli MySQL 客户端