Django基础之数据库配置
一、配置数据库引擎
Django默认支持的数据库有SQLite、MySQL、Oracle、PostgreSQL数据库,其他的数据库需要第三方的支持。请参照官方文档。
1. Django默认使用的是SQLite3数据库,我们可以通过settings.py中的DATABASES参数进行设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库引擎,默认的是sqlite3
'NAME': 'Info', # 指定数据库名称,已经创建好的数据库。使用其他的数据库引擎时Django不会自动创建数据库
'USER': 'root', # 指定数据库用户名
'PASSWORD': '', # 指定数据库密码
'HOST': '', # 指定数据库主机的IP,留空默认为localhost
'PORT': '3306', # 指定数据库端口
}
}
2. 在apps.py或者初始化文件(__init__.py)中加入:
import pymysql pymysql.install_as_MySQLdb()
3. 配置完层之后我们还需要安装数据库驱动程序这里我们安装的是pymysql。Python3之前的版本可以安装MySQLdb
pip install pymysql
二、集成已有的数据库表到models中。
1. 根据需要配置好数据库的相关信息。如上操作。
2. 执行python manage.py inspectdb
python manage.py inspectdb > api/models.py # 将生成的结果重定向到models.py中,会覆盖原文件中的数据 python manage.py inspectdb >> api/models.py # 将生成的结果重定向到models.py中,追加到文件中,不会覆盖源文件。
三、同时使用多个数据库
1. 不同app使用不同数据库
数据库路由
- 如果没有指定路由,则使用默认路由方案—default,确保数据库的检索和保存使用default数据库
- 如果需要也可以指定路由
a. 配置数据库引擎等相关信息
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'course': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Django',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456'
}
}
b. 配置数据库映射
settings.py
DATABASES_APPS_MAPPING = {
'user': 'default',
'course': 'course',
}
c.新建一个py文件(db_apps_router.py)
以下文件中的函数名不可修改。
from django.conf import settings
class DatabaseAppsRouter(object):
def db_for_read(self, model, **kwargs):
app_label = model._meta.app_label
print(app_label)
if app_label in settings.DATABASES_APPS_MAPPING:
return settings.DATABASES_APPS_MAPPING.get(app_label)
return None
def db_for_write(self, model, **kwargs):
app_label = model._meta.app_label
if app_label in settings.DATABASES_APPS_MAPPING:
return settings.DATABASES_APPS_MAPPING.get(app_label)
return None
def allow_relation(self, obj1, obj2, **kwargs):
db_obj1 = settings.DATABASES_APPS_MAPPING.get(obj1._meta.app_label)
db_obj2 = settings.DATABASES_APPS_MAPPING.get(obj2._meta.app_label)
if db_obj1 and db_obj2:
if db_obj1 == db_obj2:
return True
else:
return None
def db_for_migrate(self, db, app_label, model_name = None, **kwargs):
if db in settings.DATABASES_APPS_MAPPING.values():
return settings.DATABASES_APPS_MAPPING.get(app_label) == db
elif app_label in settings.DATABASES_APPS_MAPPING:
return False
return None
d. 再次修改配置文件
settings.py
DATABASE_ROUTERS = ['ManayDB.db_app_router.DatabaseAppsRouter']
e. 数据化迁移
python manage.py makemigrations user # 指定app的名称 python manage.py migrate --database user # 指定要同步的数据库
2. 同一app使用不同数据库
在设置数据库路由的前提下,设置不同的model的元数据app_label,达到使用不同的路由。
1. user/model.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=32)
class NoN(models.Model):
acer = models.CharField(max_length=32)
class Meta:
app_label = 'course'
2. 数据化迁移
python manage.py makemigrations course python manage.py migrate --database=course
详情请参考官方文档:https://docs.djangoproject.com/en/1.11/ref/databases/

浙公网安备 33010602011771号