django中如何使用多个数据库(一)
前言
在django项目中, 一个工程中存在多个app应用很常见,有时候希望不同的APP连接不同的数据库,这个时候就需要建立多个数据库连接。
1、前期准备
首先要确保多个app都已经在settings.py文件中的INSTALLED_APPS里注册了,否则会出现问题。
本次示例目录如下:
2、创建模型
app01中的models文件内容如下:
# -*- coding: utf-8 -*-
from django.db import models
# Create your models here.
class People(models.Model):
name = models.CharField(verbose_name=u'姓名', db_index=True)
age = models.SmallIntegerField(max_length=20, verbose_name=u'年龄')
app02中的models文件内容如下:
# -*- coding: utf-8 -*-
from django.db import models
# Create your models here.
class Department(models.Model):
name = models.CharField(verbose_name=u'部门名称', db_column='department_name')
3、数据库配置
接下来开始配置数据库,在 django的settings.py文件 中 使用DATABASES 设置定义数据库,这个设置用于映射数据库别名和特定的连接设置字典,这是 Django 定义数据库一贯的手法;DATABASES定义的是要给嵌套字典,该设置必须配置default默认数据库。默认使用SQLite进行单一数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'database',
}
当然了,我们如果不想使用默认数据库的话,可以将默认配置为空字典形式,但就是不能删除它:
DATABASES = {
'default': {}
}
既然要使用多个数据库,那么就需要我们自己来配置了:
DATABASES = {
'default': {},
'department': {
u'ENGINE': 'django.db.backends.mysql', # 默认用mysql
u'NAME': 'department', # 数据库名
u'USER': 'root', # 你的数据库user
u'PASSWORD': 'mysql', # 你的数据库password
u'HOST': '127.0.0.1', # 开发的时候,使用localhost
u'PORT': '3306', # 默认3306
'people': {
u'ENGINE': 'django.db.backends.mysql', # 默认用mysql
u'NAME': 'people', # 数据库名
u'USER': 'root', # 你的数据库user
u'PASSWORD': 'mysql', # 你的数据库password
u'HOST': '127.0.0.1', # 开发的时候,使用localhost
u'PORT': '3306', # 默认3306
}
4、迁移数据库
当然了,现在就可以进行数据库迁移了,不过要首先确保已经存在department和people这两个数据库,命令如下:
python manage.py makemigrations
python manage.py migrate --database=people
python manage.py migrate --database=department
不能直接使用python manage.py migrate,因为没有指定default数据库,会报错。除非指定了default数据库。
5、查看迁移结果
迁移完成后,就能看到两个数据库中都生成了相应的表。
department和people这两个数据库中的表完全一样。
既然已经有了两个数据库,那么就要用起来才有意义,下面来看看如何使用的:直接使用console控制台进行演示。
from app01.models import People
from app02.models import Department
People.objects.using('people').create(name='xiaoming', age=18)