Tortoise_orm迁移PostgreSQL数据库

目录

一.下载相关的库

二.准备配置文件settings.py

三.准备一个models.py

四.数据迁移

五.可能会出现的问题


一.下载相关的库
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删掉,重新执行四中的步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值