1. 数据库配置
# 1. 安装mysql数据库驱动 mysqlclient
      pip install mysqlclient  
      # 如果安装失败就手动下载:  https://www.lfd.uci.edu/~gohlke/pythonlibs/
          # 黑窗口 python 查看python版本 和支持的 win
          # 下载对应的 cp(版本)  和 win
          # 放置项目根目录 (pip install 文件名) 进行安装
      
 
# 2. 在项目的seyyings.py中配置DATABASES配置项
      DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'play',  # 数据库名称
          'HOST': '127.0.0.1',  # ip地址
          'PORT': 3306,  # 端口号
          'USER': "root",  # 用户名
          "PASSWORD": "root",  # 密码
    }
}
2. 创建模型类
# 只要模型和数据库的表能对上,不需要迁移也可使用
    class User(models.Model):
      # 字段名: 不能是Python关键字;不能使用连续下划线
      # db_column: 数据库表中的字段名称
      uid = models.AutoField(primary_key=True, db_column='uid')  # primary_key=True 主键自增长
      # CharField 必须指定长度: max_length
      username = models.CharField(max_length=30, unique=True)  # unique=True 不能重名
      password = models.CharField(max_length=128)
      regtime = models.DateTimeField(auto_now_add=True)  # auto_now_add=True 创建的时间
      class Meta:  # 元数据,模型本身的信息
          # 默认表名: 应用名_模型名
          db_table = "user"  # 指定表名
          ordering = ["username"] # 排序
'''
数据库迁移指令
python manage.py makemigrations
python manage.py migrate
反向迁移
python manage.py inspectdb > App/models1.py
'''
3. 链接多个数据库
1. settings.py配置数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db1',  # 数据库名称
        'HOST': '12.0.0.0',  # ip地址
        'PORT': 3306,  # 端口号
        'USER': "sss",  # 用户名
        "PASSWORD": "sss",  # 密码
    },
    'db_user':  {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db2',  # 数据库名称
        'HOST': '12.0.0.0',  # ip地址
        'PORT': 3306,  # 端口号
        'USER': "sss",  # 用户名
        "PASSWORD": "sss",  # 密码
    }
}
# 指定app对应的数据库
DATABASES_APPS_MAPPING = {
    'api': 'default',  # 数据库与APP应用一一对应: app-库名
    'user': 'db_user',  # 数据库与APP应用一一对应
}
2. 主应用下创建database_app_router.py:编写数据库路由文件
from django.conf import settings
class DatabaseAppsRouter(object):
    def db_for_read(self, model, **hints):
        app_label = model._meta.app_label
        if app_label in settings.DATABASES_APPS_MAPPING:
            res = settings.DATABASES_APPS_MAPPING[app_label]
            return res
        return None
    def db_for_write(self, model, **hints):
        app_label = model._meta.app_label
        if app_label in settings.DATABASES_APPS_MAPPING:
            return settings.DATABASES_APPS_MAPPING[app_label]
        return None
    def allow_relation(self, obj1, obj2, **hints):
        # 获取对应数据库的名字
        db_obj1 = settings.DATABASES_APPS_MAPPING.get(obj1._mata.app_label)
        db_obj2 = settings.DATABASES_APPS_MAPPING.get(obj2._mata.app_label)
        if db_obj1 and db_obj2:
            if db_obj1 == db_obj2:
                return True
            else:
                return False
        return None
    def db_for_migrate(self, db, app_label, model_name=None, **hints):
        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
3. settings.py添加指向数据库路由文件的路由变量
# 配置数据库的路由,里面的参数以.为分割,分别是Module文件夹名.数据库路由配置文件.数据库路由配置文件中的方法
DATABASE_ROUTERS = ['主应用名.database_app_router.DatabaseAppsRouter']