目录
一.下载相关的库
pip install tortoise-orm # 原生的异步 ORM
pip install asyncpg # 与postgresql交互的库
pip install aerich # 进行数据迁移的库
二.准备配置文件settings.py
创建一个settings.py文件,并写入以下代码:
POSTGRES_HOST: str = "127.0.0.1" # 本地连接地址
POSTGRES_PORT: str = "5432" # 端口号,postgresql默认5432
POSTGRES_USER: str = "postgres" # 数据库用户owner,默认postgres
POSTGRES_PWD: str ="123456" # 数据库连接密码
POSTGRES_DB: str = "fastapi2" #要连接的数据库名字
DB_POOL_MAX: int =20
DB_POOL_CONN_LIFE: int =600
TIMEZONE: str = "Asia/Shanghai"
TORTOISE_ORM = {
"connections": {
"default": {
"engine": "tortoise.backends.asyncpg", # 引擎是asyncpg
"credentials": {
"database": POSTGRES_DB,
"host": POSTGRES_HOST,
"password": POSTGRES_PWD,
"port": POSTGRES_PORT,
"user": POSTGRES_USER,
"maxsize": DB_POOL_MAX, # 最大连接数
# "minsize": 1, # 最小连接数
# 关闭池中非活动连接的秒数。通过 0 则禁用此机制。
# "max_inactive_connection_lifetime": 60 * 5,
"ssl": False
},
}
},
"apps": { # 后续迁移的时候调的是apps.keys(),不能写成app!
"models": {
"models": ["aerich.models",
"models"], # 是models,而不是apps.models!
"default_connection": "default",
}
},
"use_tz": False,
"timezone": TIMEZONE
}
三.准备一个models.py
创建一个models.py文件,写入要迁移给postgresql的数据表:
from tortoise import fields
from tortoise.models import Model
# 创建了三个表publish、author、book
class Publish(Model):
name = fields.CharField(max_length = 32, verbose_name = '出版社名称')
email = fields.CharField(max_length = 32, verbose_name = '出版社邮箱')
class Author(Model):
name = fields.CharField(max_length = 32, verbose_name = '作者')
age = fields.IntField(verbose_name = '年龄')
class Book(Model):
title = fields.CharField(max_length = 32, verbose_name = '书籍名称')
price = fields.IntField(verbose_name = '价格')
img_url = fields.CharField(max_length = 255, null = True, blank = True, verbose_name = '')
bread = fields.IntField(verbose_name = '阅读量')
bcomment = fields.IntField(verbose_name = '评论量')
publishs = fields.ForeignKeyField('models.Publish',related_name='books') # 一对多
authors = fields.ManyToManyField('models.Author',related_name='books',description = "作者") #多对多
四.数据迁移
1.使用aerich库,在终端输入:
aerich init -t settings.TORTOISE_ORM
若出现如下提示,则初始化成功
在当前项目目录中会自动生成一个migrations目录和一个pyproject.toml文件
2.使用aerich库,在终端输入:
aerich init-db #迁移数据库
若出现如下提示,则迁移成功:
打开pgadmin4,可以看到在db/schememas/tables中有book、author、publish这三张表:
五.可能会出现的问题
tortoise.exceptions.ConfigurationError
解决:把migrations和pyproject.toml删掉,重新执行四中的步骤