Python 对于分表的操作
在操作数据库的业务里,我们系统采用了orm框架 ,避免了过多的写sql,利用实体对数据库进行操作
需求: 账户系统里的account表是进行了分表,分表规则为accountid进行20取模,测试环境分为多套环境
a,b,c环境,需要在对数据库操作时区分环境
1、使用sqlalchemy
base = declarative_base()
def get_model(name,env):
if. env =='a':
engine = create_engine('mysql+pymysql.....这里是a环境的配置')
elif env =='b':
.......
base.metadata.reflect(engine)
table = base.metadata.table[name]
mapper(t, table)
Base.metadata.clear()
return t
当然这里的参数name是需要额外做处理的,因为存在分表的规则,所以需要在先得到具体的表名再找到对应的model
2、使用flask_sqlalchemy
通过元类编程找出对应的model
class Account(object):
__mapper = {}
@staticmethod
def model( account_id, env = 'c'):
if env == 'c':
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@xxxx'
else :
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@xxx'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db =SQLAlchemy(app)
table_index = account_id%20
class_name='account_%d' % table_index
ModelClass = Account.__mapper.get(class_name, None)
if ModelClass is None:
ModelClass = type(class_name, (db.Model,),
{
'__module__':__name__,
'__name__':class_name,
'__tablename__':'account_%d' % table_index,
'account_id':db.Column(db.Integer, primary_key=True),
'main_id':db.Column(db.Integer)
})
Account.__mapper[class_name]=ModelClass
cls = ModelClass()
cls.account_id = account_id
return cls
Python 对于分表的操作的更多相关文章
- Mycat读写分离、主从切换、分库分表的操作记录
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- python笔记8-列表list操作、多维数组
#!/usr/bin/python #python里面有个这个话,代表在linux下运行的时候#去哪个目录下找python的解释器,在windows上运行不用写# coding:utf-8# __*_ ...
- mysql分表和表分区详解
为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...
- 【mysql】mysql分表和表分区详解
为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...
- 【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)
原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_ ...
- 支持MySql的数据库自动分表工具DBShardTools发布
支持MySql的数据库自动分表工具DBShardTools发布 前段时间参与了公司的一个项目,这个项目的特点是数据量.访问量都比较大,考虑使用数据库水平分表策略,Google了大半天,竟然没有找到分表 ...
- MySQL分表
一.概念 1.为什么要分表和分区?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询 ...
- 浅谈MySQL分表
关于分表:顾名思义就是一张数据量很大的表拆分成几个表分别进行存储. 我们先来大概了解以下一个数据库执行SQL的过程: 接收到SQL --> 放入SQL执行队列 --> 使用分析器分解SQL ...
- DBA 小记 — 分库分表、主从、读写分离
前言 我在上篇博客 "Spring Boot 的实践与思考" 中比对不同规范的 ORM 框架应用场景的时候提到过主从与读写分离,本篇随笔将针对此和分库分表进行更深入地探讨. 1. ...
随机推荐
- Idea 项目jdk环境配置
1.先配置jdk环境变量
- Open Cascade 转化为OpenSceneGraph中的Mesh
#include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osgGA/StateSetManipul ...
- crontab 常见 /dev/null 2>&1 详解
大部分在 crontab 计划任务中都会年到未尾带 >/dev/null 2>&1,是什么意思呢? > 是重定向 /dev/null 代表空设备文件 1 表示stdout标准 ...
- ServletConfig接口
ServletConfig接口 Servlet容器初始化Servlet对象时会为Servlet创建一个ServletConfig对象,在ServletConfig对象中包含了Servlet的初始化参数 ...
- Linux环境下TomCat使用指定JDK的版本
服务器是web服务器,在上面安装了jdk1.7和jdk1.8.及多个tomcat应用,默认/etc/profile 配置的jdk1.7,大部分tomcat应用使用的也是jdk1.7, 但目前有一个新项 ...
- vue2.0中watch总结:普通监听和深度监听
watch:{} 是一个对象,一定要当成对象来用,可监听数据,是vue中数据发生变化进行处理的函数, 它有三个选项 第一个handler:其值是一个回调函数.即监听到变化时应该执行的函数.第二个是de ...
- iframe标签的初试
要使用的框架的页面代码: <body> <form id="form1" runat="server"> <div> < ...
- SpringMvc 支持一下类型Serlvet 原生的 API 作为目标方法的参数
/** * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型 * * HttpServletRequest * HttpServletResponse * HttpSes ...
- python - readline 模块
转载:https://www.cnblogs.com/fireflow/p/4841413.html readline模块定义了一系列函数用来读写Python解释器中历史命令,并提供自动补全命令功能. ...
- Ubuntu:Unable to locate package ***
在Ubuntu 上使用apt-get 安装包时遇到 Unable to locate package 的信息 解决方案: 更细apt-get然后重新安装 #sudo apt-get update ...