项目目录如下
创建不同的app
python manage.py startapp app1
python manage.py startapp app2
settings.py注册app
INSTALLED_APPS = [
#'app名.类名', # 类名为app下apps.py文件中的类名
"app1.apps.Db1Config",
"app2.apps.Db2Config",
]
settings.py注册数据库
注:DATABASES中第一个数据库(即默认数据库)必须是'default',其他数据库名(即DATABASES中的键)可自定义(为使用方便,尽量与MySQL数据库名一致。此处为了理解,设置与MySQL数据库名不一致,且给其起名为Django数据库)
# Django数据库与MySQL数据库对应关系
DATABASES = {
# 第一个键必须是default,默认数据库,其他键(即Django中数据库名)可自定义
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1', # MySQL中数据库名
'USER': 'root', # MySQL用户名
'PASSWORD': 'Test1234', # MySQL密码
'HOST': '127.0.0.1',
'PORT': '3306'
},
'default2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db2', # MySQL中数据库名
'USER': 'root', # MySQL用户名
'PASSWORD': 'Test1234', # MySQL密码
'HOST': '127.0.0.1',
'PORT': '3306'
},
}
# 配置多个数据库的路径
# (djangoDemo为项目名,
# db_router为settings.py同目录的db_router.py
# DatabaseRouter为db_router.py中的类名
DATABASE_ROUTERS = ['dbtest.db_router.DatabaseRouter']
# app与Django数据库对应关系{'app名':'settings.py的DATABASES中对应的键'}
DATABASE_APPS_MAPPING = {
'app1':'default',
'app2':'default2'
}
settings.py同目录下创建db_router.py
# coding:utf-8
from django.conf import settings
DATABASES = settings.DATABASE_APPS_MAPPING
class DatabaseRouter(object):
def db_for_read(self,model,**hints):
""" 数据库进行读操作时指向的数据库 """
if model._meta.app_label in DATABASES:
return DATABASES[model._meta.app_label]
return None
def db_for_write(self,model,**hints):
""" 数据库进行写操作时指向的数据库 """
if model._meta.app_label in DATABASES:
return DATABASES[model._meta.app_label]
return None
def allow_migrate(self,db,app_label,model=None,**hints):
""" 允许将模型转换为sql语句 """
if db in DATABASES.values():
return DATABASES.get(app_label) == db
elif app_label in DATABASES:
return False
return None
models.py指定数据库
from django.db import models
class db1(models.Model):
name1 = models.CharField(max_length=32)
age1 = models.IntegerField()
class Meta:
#db_table = "MySQL中显示的数据表名"
#verbose_name_plural = u"后台显示的中文表名"
db_table = "db1"
verbose_name_plural = u"表1"
# 此处为app名,setting.py已设置app与Django数据库,Django数据库与MySQL数据库对应关系
app_label = "app1"
# Create your models here.
from django.db import models
class db2(models.Model):
name2 = models.CharField(max_length=32)
addr2 = models.CharField(max_length=32)
class Meta:
db_table = "db2"
verbose_name_plural = u"表2"
# 此处为app名,setting.py已设置app与Django数据库,Django数据库与MySQL数据库对应关系
app_label = "app2"
数据库迁移
python manage.py makemigrations
# 默认数据库迁移数据。即settings.py中DATABASES中的default数据库(即DATABASES中键default)
python manage.py migrate
# default2数据库迁移数据。即settings.py中DATABASES中default2数据库(即DATABASES中键default2)
python manage.py migrate --database=default2
views中数据库使用
# Create your views here.
from app1.models import db1
from app2.models import db2
# 此处default和default2为Django数据库名,即settings.py中DATABASES中的键
db1.objects.using('default').create(字段1='值1', 字段2='值2')
db2.objects.using('default2').filter(...)
‘’