Django 之 分表

Posted 刘[小]倩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 之 分表相关的知识,希望对你有一定的参考价值。

app名称为‘core’,基本的models.py文件内容如下:

 1 class Province(models.Model):
 2     name = models.CharField(u省份名称,max_length=32)
 3     code = models.IntegerField(verbose_name=u区号, unique=True)
 4     
 5     def __unicode__(self):
 6         return self.name
 7     
 8     class Meta:
 9         verbose_name = u省份列表
10         verbose_name_plural = u省份列表

法I:

重构 manager 中的 get_query_set() 方法。

需要说明的是:在 django 默认情况下,会为每一个models 类添加一个名为 objects 的 Manager,这个就是 Province.objects.all() 中 objects 的由来。

修改后的 models.py 代码如下,表结构必须一致:

 1 # coding:utf-8
 2 from django.db import models
 3 
 4 # Create your models here.
 5 class ProvinceManager(models.Manager):
 6     def get_queryset(self):
 7 #         return super(ProvinceManager, self).get_queryset().filter(id=1)
 8         self.model._meta.db_table = core_province_1‘ # 我的app名为core
 9         return super(ProvinceManager, self).get_queryset()10         11     
12 class Province(models.Model):
13     name = models.CharField(u省份名称,max_length=32)
14     code = models.IntegerField(verbose_name=u区号, unique=True)
15     
16     objects = ProvinceManager()
17     
18     def __unicode__(self):
19         return self.name
20     
21     class Meta:
22         verbose_name = u省份列表
23         verbose_name_plural = u省份列表

可以多写几个 Manager 来对应不同的表,同时对应多写几个不同的 objects(可以随意起名),在调用时调用相应的 Manager。

法II:

在哪里调用就在哪里更改。更改处添加代码如下:

1 from core.models import Province
2 
3 Province._meta.db_table = core_prvoince_2
4 rows = Province.objects.all() 

总结:

不论哪种方法,其主要还是要更改 models 的 _meta.db_table 的值

以上是关于Django 之 分表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django Summernote 中显示编程片段的代码块?

Mysql之分库分表及中间件

django-rest-framework 数据表列分表

Django分表操作及FQ方法

数据库分表之Mybatis+Mysql实践(含部分关键代码)

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段