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 中显示编程片段的代码块?
数据库分表之Mybatis+Mysql实践(含部分关键代码)
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段