一、配置数据库引擎

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/

版权声明:本文为qq2233297039原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qq2233297039/articles/8387282.html