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']