以下内容为原创,转载请注明出处!
最近遇到一个需求,发现有张表有1亿条数据以上,所以需要分表,下面演示下django怎么分表(用dataid%10,来分了10张表,也可以用uuid替代id来分)。
首页分表,可以直接利用navicat直接复制表,如下图:

models文件:
class Point(models.Model):
dataid = models.IntegerField('监测点ID', db_index=True)
class Meta:
verbose_name_plural = verbose_name = '监测点'
def __unicode__(self):
return self.name
# filter过滤,通过dataid来确定存储在哪张表(同样的,我们也可以给get方法写个def)
@classmethod
def filter_table(Class, dataid):
slice = int(dataid) % 10
if slice == 0:
db_name = 'iot_point'
elif slice == 1:
db_name = 'iot_point_copy'
else:
db_name = 'iot_point_copy{}'.format(slice)
Class._meta.db_table = db_name
return Class.objects.filter(dataid=dataid)
# 根据dataid来区分存在哪个表中
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
slice = int(self.dataid) % 10
if slice == 0:
db_name = 'iot_point'
elif slice == 1:
db_name = 'iot_point_copy'
else:
db_name = 'iot_point_copy{}'.format(slice)
self._meta.db_table = db_name
super(Point, self).save(force_insert,force_update,using,update_fields)# 下面语句最终会在iot_point_copy3下面存储一条数据 point = Point.objects.create(dataid=63) # 下面语句会直接去iot_point_copy3查询语句 print Point.filter_table(dataid=63)