22title : 切换数据库
33---
44
5- ::: tip
6- 此教程仅适用于 PostgreSQL 用户
5+ ::: caution
6+ fba 自 v1.10.0 开始,已将默认数据库由 MySQL 替换为 PostgreSQL
77:::
88
9- fba 支持 MySQL、 PostgreSQL 两种数据库,默认配置使用 MySQL
9+ fba 支持 PostgreSQL、MySQL 两种数据库,默认配置使用 PostgreSQL
1010
11- 如果本地未安装 PostgreSQL,你可以使用以下命令创建 Docker 镜像
11+ ## Docker 镜像
12+
13+ 如果你未在本地安装或习惯使用 Docker 镜像,
14+
15+ ### PostgreSQL
16+
17+ ``` shell:no-line-numbers
18+ docker run -d \
19+ --name fba_postgres \
20+ --restart always \
21+ -e POSTGRES_DB='fba' \
22+ -e POSTGRES_PASSWORD='123456' \
23+ -e TZ='Asia/Shanghai' \
24+ -v fba_postgres:/var/lib/postgresql/data \
25+ -p 5432:5432 \
26+ postgres:16
27+ ```
28+
29+ ### MySQL
1230
1331``` shell:no-line-numbers
14- docker run -d --name fba_postgres --restart always -e POSTGRES_DB='fba' -e POSTGRES_PASSWORD='123456' -e TZ='Asia/Shanghai' -v fba_postgres:/var/lib/postgresql/data -p 5432:5432 postgres:16
32+ docker run -d \
33+ --name fba_mysql \
34+ --restart always \
35+ -e MYSQL_DATABASE=fba \
36+ -e MYSQL_ROOT_PASSWORD=123456 \
37+ -e TZ=Asia/Shanghai \
38+ -v fba_mysql:/var/lib/mysql \
39+ -p 3306 \
40+ mysql:8.0.41 \
41+ --default-authentication-plugin=mysql_native_password \
42+ --character-set-server=utf8mb4 \
43+ --collation-server=utf8mb4_general_ci \
44+ --lower_case_table_names=1
1545```
1646
1747## 环境配置
1848
19- PostgreSQL 与 MySQL 在用户名、端口号等方面有所不同,如果你使用上面的命令创建了 Docker 镜像,需修改 ` .env ` 部分配置如下,否则,请根据
20- PostgreSQL 配置进行修改
49+ PostgreSQL 与 MySQL 在用户名、端口号等方面有所不同,如果你使用上面的命令创建了 Docker 镜像,需修改 ` .env `
50+ 部分配置如下,否则,请根据实际配置进行修改
51+
52+ ### PostgreSQL
2153
2254``` dotenv:no-line-numbers
2355# Database
@@ -28,18 +60,31 @@ DATABASE_USER='postgres'
2860DATABASE_PASSWORD='123456'
2961```
3062
63+ ### MySQL
64+
65+ ``` dotenv:no-line-numbers
66+ # Database
67+ DATABASE_TYPE='mysql'
68+ DATABASE_HOST='127.0.0.1'
69+ DATABASE_PORT=3306
70+ DATABASE_USER='root'
71+ DATABASE_PASSWORD='123456'
72+ ```
73+
3174## 解耦
3275
33- 在实际项目开发中,几乎不会存在同时兼容多种数据库的情况,我们在模型中使用 ` with_variant ` 尽可能的兼容 MySQL 和
34- PostgreSQL ,例如:
76+ 在实际项目开发中,几乎不会存在同时兼容多种数据库的情况,我们在模型中使用 ` with_variant ` 尽可能的兼容 PostgreSQL 和
77+ MySQL ,例如:
3578
3679``` python:no-line-numbers
37- remark: Mapped[str | None] = mapped_column(LONGTEXT ().with_variant(TEXT , 'postgresql ')) # [!code word:with_variant]
80+ remark: Mapped[str | None] = mapped_column(sa.TEXT ().with_variant(LONGTEXT , 'mysql ')) # [!code word:with_variant]
3881```
3982
83+ 解耦步骤如下:
84+
4085- 删除 ` with_variant ` 相关代码并且仅保留数据库对应的类型
4186- 删除 ` backend/core/conf.py ` 文件中的 ` DATABASE_TYPE ` 及其相关的调用代码
4287- 删除 ` .env_example ` 和 ` .env ` 文件中的 ` DATABASE_TYPE `
4388- 更新 ` backend/templates/py/model.jinja ` 文件中的 ` database_type ` 相关代码
44- - 删除 ` backend/sql ` 目录中的 ` mysql ` 或 ` postgresql ` 文件夹
45- - 删除 ` docker-compose.yml ` 文件中的 ` fba_mysql ` 或 ` fba_postgres ` 容器脚本
89+ - 删除 ` backend/sql ` 目录中的 ` postgresql ` 或 ` mysql ` 文件夹
90+ - 删除 ` docker-compose.yml ` 文件中的 ` fba_postgres ` 或 ` fba_mysql ` 容器脚本
0 commit comments