项目目录如下
创建不同的app
settings.py注册app
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'
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
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
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
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"
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
# 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"
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
数据库迁移
views中数据库使用
‘’