django 数据库配置
2025年2月18日大约 2 分钟约 716 字
启动本地数据库服务
docker run -d --name mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v C:/docker-data/mysql:/var/lib/mysql mysql:latest
docker run -d --name postgres --restart=always -e POSTGRES_PASSWORD=123456 -e POSTGRES_USER=postgres -e POSTGRES_DB=testdb -p 5432:5432 -v C:/docker-data/postgres:/var/lib/postgresql postgres:latest
docker run -d --name redis --restart=always -p 6379:6379 -v C:/docker-data/redis:/data redis:latest redis-server --appendonly yes --requirepass "123456"启动本地mysql、postgres、redis,并设置密码为123456
mysql依赖:mysqlclient,PostgreSQL依赖:psycopg[binary],redis依赖:django-redis
注意: mysql数据引擎一般选INNODB,新建mysql数据库时,字符选择utf-8 Unicode,排序规则一般选择utf8_general_ci
django配置数据库
conf/settings.py
# 数据库配置示例
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "demo-django",
'USER': 'root',
'PASSWORD': '123456',
'HOST': "127.0.0.1" if not os.getenv('PRODUCTION') else "172.17.0.1",
'PORT': 3306,
# 'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' } # 这里如果报错storage_engine就改成 default_storage_engine
# 'OPTIONS': { 'init_command': 'SET default_storage_engine=INNODB;' } # 这里如果报错storage_engine就改成 default_storage_engine
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
},
'postgresql': {
'ENGINE': 'django.db.backends.postgresql', # postgres 数据库配置
'NAME': 'django-rest-framework-template', # 数据库名字
'USER': 'postgres', # 用户名
"PASSWORD": '123456', # 自己的密码
"HOST": "127.0.0.1" if not os.getenv('PRODUCTION') else "172.17.0.1",
'PORT': 5432,
# 持久连接配置(可选,生产环境推荐)
'CONN_MAX_AGE': 600 if os.getenv('PRODUCTION') else 0, # 生产环境600秒,开发环境0
# 连接健康检查(可选,提高连接复用健壮性)
'CONN_HEALTH_CHECKS': True if os.getenv('PRODUCTION') else False,
'OPTIONS': {
# 设置搜索路径(已有)
'options': '-c search_path=public',
# 如果需要更高的隔离级别(可选)
# 'isolation_level': IsolationLevel.SERIALIZABLE, # 需要导入:from django.db.backends.postgresql.psycopg_any import IsolationLevel
}
},
'sqlite3': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
}
# 缓存配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache", # 需安装 django-redis
"LOCATION": "redis://123456@127.0.0.1:6379/0",
# 'LOCATION': 'redis://172.17.0.1:6379/0' # docker宿主机服务
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
'KEY_PREFIX': 'demo',
}
}转移数据库
# 检查迁移完整性
python manage.py check
python manage.py makemigrations
python manage.py migrate
python manage.py showmigrations
# 进入Git控制台(为了确保是utf-8编码环境,Windows导出的可能不是uft-8编码文件)
# & "C:\Program Files\Git\git-bash.exe" --cd="$PWD"
wsl
# source .venv/Scripts/activate # 激活环境
# 导出数据
uv run python manage.py dumpdata --database=default --indent 2 --output=backup.json # 导出数据库全部数据
# uv run python manage.py dumpdata --database=default --indent 2 > backup.json # 导出数据库全部数据
# python manage.py dumpdata app_name --output=backup.app.json # 指定app数据
# python manage.py dumpdata app_name.model_name --output=backup.model.json # 指定模型数据
file -i backup.json # 确认文件编码是否为utf-8(powershell导出的可能不是uft-8编码文件)
'修改 settings.py 配置,将新数据库设置为默认数据库default'
# 测试数据库连接
python manage.py dbshell --database=default
python manage.py check --database=default
# 清理旧的迁移记录(推荐)
'删除所有应用的迁移文件(除了 __init__.py)'
# 创建新的迁移
python manage.py makemigrations
python manage.py migrate
# 导入全部数据
python manage.py loaddata backup.json -e auth -e admin -e contenttypes -e sessions --verbosity=3
# python manage.py loaddata backup.json --verbosity=3
# 验证迁移
python manage.py showmigrations # 检查数据库状态
python manage.py check --database=default # 测试数据库连接
python manage.py runserver # 运行服务器测试