django之每个app分别对应一个数据库
首先创建数据库
create database aaa charset=utf8;
create database bbb charset=utf8;
创建app
django-admin startapp test1
django-admin startapp test2
注册app
在settings.py的INSTALLED_APPS中进行添加
INSTALLED_APPS = [
'test1',
'test2'
]
在项目中配置数据库
在settings.py的DATABASES中进行配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test1',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '3306',
},
'default2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '3306',
},
}
添加数据库路由文件地址
在settings.py中新增
DATABASE_ROUTERS = ['testaaa.db_router.DatabaseRouter'] # (引号很重要)
testaaa为项目名
db_router为settings.py同目录下的文件db_router.py
DatabaseRouter为db_router.py中的一个类
DatabaseRouter类
# -*- coding: utf-8 -*-
class DatabaseRouter(object):
"""
A router to control all database operations on models in the
auth application.
"""
# 这是准备加入 db_user 数据库的app名字列表,
# 如果决定把一些app下创建的表就放到default中,就把app名字写到里面
db_default_apps = (
"aaa",
)
db_default2_apps = (
"bbb",
)
def db_for_read(self, model, **hints):
"""
Attempts to read auth models go to default.
"""
if model._meta.app_label in self.db_default_apps:
return 'default'
if model._meta.app_label in self.db_default2_apps: # 这里也可以跟db_user_apps一样
return 'default2' # 也可以使用一个变量接收到这个列表
return None # 意思就是把那些app下创建的表就放到 #default2库中,就把app名字写到列表里面
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to default.
"""
if model._meta.app_label in self.db_default_apps:
return 'defalut'
if model._meta.app_label in self.db_default2_apps:
return 'default2'
return None
def allow_migrate(self, db, app_label, model=None, **hints):
"""
Make sure the auth app only appears in the 'default'
database.
"""
if app_label in self.db_default_apps:
return db == 'default'
if app_label in self.db_default2_apps:
return db == 'default2'
return None
然后在各自app的models中写模型类
class User(models.Model):
name = models.CharField(max_length=20)
class Meta:
db_table = '可以使用自定义的表名'
app_label = 'bbb' # 解释这个模型类属于哪个app(很重要不可少)
--------------------------------------------------------更新------------------------------------------------------------------
迁移建表
python manage.py makemigations
python manage.pu migrate --database=xsbot # (xsbot为数据库的简写)