Files
djangoadmin-wiki/DjangoAdmin_Django_NaiveVue/zh/volume1/database.md
T
2026-09-12 23:12:15 +08:00

278 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库初始化
本章节介绍如何初始化项目数据库,包括建库、建表、导入种子数据以及后续的数据库迁移管理。
项目使用 Django 的 ORM 框架管理数据库,支持 `MySQL`、`PostgreSQL`、`SQL Server`、`SQLite`、`Oracle` 等数据库。
:::tip 温馨提示
数据库初始化前,请确保已完成以下准备工作:
1. 目标数据库服务已启动(如 MySQL 8.0+)
2. `.env` 文件中的 `DATABASE_ENGINE` 和数据库连接信息已正确配置
3. Python 依赖已安装(`pip install -r requirements.txt`)
:::
## 第一步:创建数据库
在 `MySQL` 提示符中创建项目数据库:
```sql
-- 创建数据库(UTF-8 编码)
CREATE DATABASE `djangoadmin.django.elevue`
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
-- 查看数据库
SHOW DATABASES;
```
:::tip 温馨提示
数据库名称需要与 `.env` 文件中的 `DATABASE_NAME` 配置一致,默认为 `djangoadmin.django.elevue`。
:::
## 第二步:配置数据库连接
确保 `.env` 文件中的数据库配置正确:
```bash
# ============================================================
# 数据库配置
# ============================================================
DATABASE_ENGINE="django.db.backends.mysql" # 数据库引擎
DATABASE_NAME='djangoadmin.django.elevue' # 数据库名称
DATABASE_HOST="127.0.0.1" # 数据库地址
DATABASE_PORT=3306 # 数据库端口
DATABASE_USER="root" # 数据库用户名
DATABASE_PASSWORD="root" # 数据库密码(请修改为实际密码)
DATABASE_PREFIX="django_" # 数据表前缀
```
:::tip 多数据库支持
`DATABASE_ENGINE` 支持以下数据库引擎:
| 数据库 | ENGINE 值 | 默认端口 | 依赖包 |
|:----|:----|:----|:----|
| MySQL | `django.db.backends.mysql` | 3306 | mysqlclient |
| PostgreSQL | `django.db.backends.postgresql` | 5432 | psycopg2-binary |
| SQLite | `django.db.backends.sqlite3` | - | 内置 |
| Oracle | `django.db.backends.oracle` | 1521 | cx-Oracle |
| SQL Server | `mssql` | 1433 | mssql-django |
切换数据库引擎后,需安装对应的 Python 驱动包。例如切换到 PostgreSQL:
```bash
pip install psycopg2-binary
```
然后修改 `.env` 中的 `DATABASE_ENGINE` 和相关配置即可。
:::
## 第三步:执行数据库迁移
项目使用 Django 的迁移系统管理数据库结构。执行以下命令创建数据表:
```bash
# 为所有应用生成迁移文件
python manage.py makemigrations
# 执行所有迁移,创建数据表
python manage.py migrate
```
+ 迁移命令详解
```bash
# 为指定应用生成迁移文件
python manage.py makemigrations application.user
python manage.py makemigrations application.role
# 查看迁移状态
python manage.py showmigrations
# 查看某个迁移的 SQL 语句(不实际执行)
python manage.py sqlmigrate application.user 0001
# 回退迁移(撤销到指定迁移)
python manage.py migrate application.user 0001
```
:::tip 温馨提示
`makemigrations` 会根据 `models.py` 中的模型定义自动生成迁移文件,存放在各应用的 `migrations/` 目录下。`migrate` 会执行迁移文件创建或修改数据表结构。
:::
## 第四步:导入初始数据
数据库初始数据(管理员账号、默认角色、菜单权限等)通过 SQL 脚本导入:
```bash
# 使用 mysql 命令行导入
mysql -uroot -p djangoadmin.django.elevue < document/mysql/djangoadmin.django.elevue.sql
# 或使用 Navicat 等工具:右键数据库 → 运行 SQL 文件
```
:::tip 种子数据说明
初始化完成后,数据库中包含以下默认数据:
| 数据 | 说明 |
|:----|:----|
| 管理员账号 | `admin` / `123456`(超级管理员,ID=1,跳过权限校验) |
| 默认角色 | 超级管理员角色 |
| 默认菜单 | 系统管理、内容管理、监控管理等菜单及权限节点 |
| 数据字典 | 系统内置字典数据 |
| 系统配置 | 系统默认配置项 |
:::
## 第五步:回填数据库字段注释(可选)
项目提供了自定义管理命令,用于为数据库表和字段添加中文注释:
```bash
# 为所有数据表添加字段注释
python manage.py add_full_comments
```
:::tip 温馨提示
此命令会读取 Django 模型中的 `verbose_name` 和 `help_text` 属性,将其写入数据库的字段注释中,便于使用 Navicat 等工具查看表结构时理解每个字段的含义。
:::
## 第六步:验证
启动后端服务,验证数据库连接是否正常:
```bash
python manage.py runserver
```
如果启动过程中没有数据库连接错误,说明数据库初始化成功。
+ 使用 Django Shell 验证
```bash
# 进入 Django Shell
python manage.py shell
# 测试数据库查询
>>> from application.user.models import User
>>> User.objects.count()
1
>>> User.objects.first().username
'admin'
```
## 数据库迁移管理
项目使用 Django 内置的迁移系统管理数据库版本,确保数据库结构与代码模型保持同步。
+ 迁移文件位置
```
application/
├── user/
│ ├── migrations/
│ │ ├── __init__.py
│ │ └── 0001_initial.py # 初始迁移
│ └── models.py
├── role/
│ ├── migrations/
│ │ ├── __init__.py
│ │ └── 0001_initial.py
│ └── models.py
└── ...
```
+ 生成增量迁移
当修改了模型(如新增字段、修改表结构)后,需要生成增量迁移文件:
```bash
# 自动生成迁移脚本(Django 会对比当前模型与数据库的差异)
python manage.py makemigrations
# 查看迁移文件内容
python manage.py sqlmigrate application.user 0002
```
+ 执行迁移
```bash
# 应用所有待执行的迁移
python manage.py migrate
```
:::tip 迁移工作流
典型的数据库迁移工作流如下:
```
1. 修改模型(application/<module>/models.py)
2. 生成迁移脚本:python manage.py makemigrations
3. 检查生成的迁移文件(application/<module>/migrations/ 目录)
4. 执行迁移:python manage.py migrate
5. 验证数据库结构变更
```
:::
## 代码生成器与数据库
项目提供了代码生成器,可以根据数据库表定义自动生成完整的 CRUD 模块:
```bash
# 从数据库表生成模块(解析表结构 → 生成配置 → 生成代码 → 自动迁移)
python generator.py django_<table_name>
# 仅查看配置,不生成代码
python generator.py django_<table_name> --dry-run
# 从已有配置文件生成代码
python generator.py --config config.json
```
:::tip 温馨提示
代码生成器会自动执行 `makemigrations` 和 `migrate`,创建对应的数据表。生成的代码包括 Django 模型、表单、服务、视图、路由以及前端 Vue 页面。
:::
## 数据库备份与恢复
+ MySQL 备份
```bash
# 备份数据库
mysqldump -uroot -p djangoadmin.django.elevue > backup.sql
# 恢复数据库
mysql -uroot -p djangoadmin.django.elevue < backup.sql
```
+ PostgreSQL 备份
```bash
# 备份数据库
pg_dump -U postgres djangoadmin.django.elevue > backup.sql
# 恢复数据库
psql -U postgres djangoadmin.django.elevue < backup.sql
```
+ SQLite 备份
```bash
# 备份数据库(直接复制文件)
cp db.sqlite3 db_backup.sqlite3
# 恢复数据库(替换文件)
cp db_backup.sqlite3 db.sqlite3
```
## 总结
数据库初始化的核心步骤:
```
1. 创建数据库:CREATE DATABASE `djangoadmin.django.elevue`
2. 配置 .env:设置 DATABASE_ENGINE、DATABASE_NAME 等连接信息
3. 执行迁移:python manage.py makemigrations && python manage.py migrate
4. 导入初始数据:mysql ... < document/mysql/djangoadmin.django.elevue.sql
5. 回填注释(可选):python manage.py add_full_comments
```
后续的模型变更通过 Django 迁移系统管理(`makemigrations` + `migrate`),确保数据库结构与代码保持同步。如需使用代码生成器创建新模块,生成器会自动处理数据库迁移。