FastAPI - Tortoise ORM 数据库基础操作

2024-05-07 07:28

本文主要是介绍FastAPI - Tortoise ORM 数据库基础操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 1. 安装 Tortoise ORM
      • 2. 定义模型
      • 3. 初始化数据库连接
      • 4. 数据库操作
        • 4.1 创建数据
        • 4.2 查询数据
        • 4.3 更新数据
        • 4.4 删除数据
      • 5. 使用 Pydantic 模型
      • 6. 关闭数据库连接
      • 7. fields类相关操作
        • 1. `fields.IntField`
        • 2. `fields.BigIntField`
        • 3. `fields.SmallIntField`
        • 4. `fields.CharField`
        • 5. `fields.TextField`
        • 6. `fields.BooleanField`
        • 7. `fields.FloatField`
        • 8. `fields.DecimalField`
        • 9. `fields.DatetimeField`
        • 10. `fields.DateField`
        • 11. `fields.TimeField`
        • 12. `fields.JSONField`
        • 13. `fields.BinaryField`
        • 14. `fields.ForeignKeyField`
        • 15. `fields.ManyToManyField`
        • 16. `fields.OneToOneField`
        • 其他字段
      • 8. ORM(对象关系映射)数据迁移
        • 1. 初始化迁移环境
        • 2. 创建迁移文件
        • 3. 应用迁移
        • 4. 查看迁移状态
        • 5. 回滚迁移
        • 6. 生成模型
        • 7. 清除迁移历史


Tortoise ORM 是一个异步的 ORM 框架,使用 Python 的类和对象来操作数据库,不需要编写 SQL 语句。


1. 安装 Tortoise ORM

首先,确保已经安装 Tortoise ORM。如果还没有安装,可以使用 pip 来安装:

pip install tortoise-orm

2. 定义模型

使用 Tortoise ORM, 需要定义模型类来表示数据库中的表。模型类继承自 tortoise.models.Model

from tortoise import fields, models
from tortoise.contrib.pydantic import pydantic_model_creatorclass Tournament(models.Model):id = fields.IntField(pk=True)name = fields.CharField(max_length=255)created_at = fields.DatetimeField(auto_now_add=True)class Meta:table = 'tournaments'  # 自定义表名# 创建 Pydantic 模型
Tournament_Pydantic = pydantic_model_creator(Tournament, name="Tournament")

3. 初始化数据库连接

在使用 Tortoise ORM 之前,需要初始化数据库连接。

from tortoise import Tortoise, run_asyncasync def init_db():# 这里使用 SQLite 数据库作为示例await Tortoise.init(db_url='sqlite://db.sqlite3',modules={'models': ['your_app']}  # 你的模型所在的模块)# 生成数据库表结构await Tortoise.generate_schemas()# 运行初始化函数
run_async(init_db())

4. 数据库操作

定义好模型和数据库连接后,可以进行各种数据库操作。

4.1 创建数据
async def create_tournament():tournament = await Tournament.create(name='New Tournament')print(f'Created tournament with id: {tournament.id}')run_async(create_tournament())
4.2 查询数据
async def get_tournaments():tournaments = await Tournament.all()for tournament in tournaments:print(f'Tournament: {tournament.name}')run_async(get_tournaments())
4.3 更新数据
async def update_tournament(tournament_id: int, new_name: str):await Tournament.filter(id=tournament_id).update(name=new_name)print(f'Updated tournament with id: {tournament_id}')run_async(update_tournament(1, 'Updated Tournament'))
4.4 删除数据
async def delete_tournament(tournament_id: int):await Tournament.filter(id=tournament_id).delete()print(f'Deleted tournament with id: {tournament_id}')run_async(delete_tournament(1))

5. 使用 Pydantic 模型

Tortoise ORM 提供了 pydantic_model_creator 函数,可以自动生成 Pydantic 模型。

# 创建 Pydantic 模型
Tournament_Pydantic = pydantic_model_creator(Tournament, name="Tournament")# 使用 Pydantic 模型
tournament_data = Tournament_Pydantic.from_orm(tournament)
print(tournament_data.json())

6. 关闭数据库连接

在应用结束时,确保关闭数据库连接。

from tortoise import Tortoise# 关闭数据库连接
@app.on_event("shutdown")
async def close_orm():await Tortoise.close_connections()

7. fields类相关操作

在 Tortoise ORM 中,fields 是模型中用于定义数据库表字段的类。这些字段类定义了数据库表中每个字段的类型、约束和其他属性。以下是 Tortoise ORM 中一些常用的 fields 类:

1. fields.IntField

用于定义整数字段。

from tortoise import fieldsclass MyModel(Model):id = fields.IntField(pk=True)
2. fields.BigIntField

用于定义大整数字段。

from tortoise import fieldsclass MyModel(Model):id = fields.BigIntField(pk=True)
3. fields.SmallIntField

用于定义小整数字段。

from tortoise import fieldsclass MyModel(Model):id = fields.SmallIntField(pk=True)
4. fields.CharField

用于定义字符字段,通常用于存储短文本。

from tortoise import fieldsclass MyModel(Model):name = fields.CharField(max_length=255)
5. fields.TextField

用于定义文本字段,通常用于存储长文本。

from tortoise import fieldsclass MyModel(Model):description = fields.TextField()
6. fields.BooleanField

用于定义布尔字段。

from tortoise import fieldsclass MyModel(Model):is_active = fields.BooleanField()
7. fields.FloatField

用于定义浮点数字段。

from tortoise import fieldsclass MyModel(Model):price = fields.FloatField()
8. fields.DecimalField

用于定义精确小数字段。

from tortoise import fieldsclass MyModel(Model):balance = fields.DecimalField(max_digits=10, decimal_places=2)
9. fields.DatetimeField

用于定义日期时间字段。

from tortoise import fieldsclass MyModel(Model):created_at = fields.DatetimeField(auto_now_add=True)
10. fields.DateField

用于定义日期字段。

from tortoise import fieldsclass MyModel(Model):birth_date = fields.DateField()
11. fields.TimeField

用于定义时间字段。

from tortoise import fieldsclass MyModel(Model):start_time = fields.TimeField()
12. fields.JSONField

用于定义 JSON 字段,可以存储复杂的数据结构。

from tortoise import fieldsclass MyModel(Model):data = fields.JSONField()
13. fields.BinaryField

用于定义二进制字段,可以存储二进制数据。

from tortoise import fieldsclass MyModel(Model):image = fields.BinaryField()
14. fields.ForeignKeyField

用于定义外键字段,用于建立模型之间的关系。

from tortoise import fieldsclass MyModel(Model):user = fields.ForeignKeyField('models.User')
15. fields.ManyToManyField

用于定义多对多字段,用于建立模型之间的多对多关系。

from tortoise import fieldsclass MyModel(Model):tags = fields.ManyToManyField('models.Tag')
16. fields.OneToOneField

用于定义一对一字段,用于建立模型之间的关系。

from tortoise import fieldsclass MyModel(Model):profile = fields.OneToOneField('models.Profile')
其他字段

Tortoise ORM 还提供了其他一些字段,如 fields.UUIDFieldfields.IPAddressFieldfields.EmailField 等,用于处理特定类型的数据。

在定义模型字段时,可以设置各种属性,如 nulldefaultpkuniqueindex 等,以控制字段的行为和约束。


8. ORM(对象关系映射)数据迁移

ORM(对象关系映射)数据迁移是管理数据库模式更改的过程。在使用 ORM 时,通常会使用 ORM 提供的迁移工具来处理数据库模式的变更,而不是直接编写 SQL 语句。以下是一些常见的 ORM 迁移命令:

1. 初始化迁移环境

在开始使用迁移之前,需要初始化迁移环境, 涉及到设置数据库连接和配置迁移目录。

# 使用 Tortoise ORM 的迁移工具
tortoise-orm init-db
2. 创建迁移文件

一旦迁移环境设置好,可以创建迁移文件来描述你的数据库模式更改。

# 创建一个新的迁移文件
tortoise-orm makemigrations

这将生成一个新的迁移文件,其中包含了对数据库模式的更改。

3. 应用迁移

创建迁移文件后,可以应用这些迁移来更新数据库模式。

# 应用所有未应用的迁移
tortoise-orm migrate
4. 查看迁移状态

如果查看当前的迁移状态,可以使用以下命令:

# 查看当前的迁移状态
tortoise-orm showmigrations
5. 回滚迁移

如果需要回滚迁移,可以使用命令:

# 回滚最近的一次迁移
tortoise-orm migrate --revision=-1
6. 生成模型

如果需要根据数据库生成模型,可以使用命令:

# 生成模型
tortoise-orm inspectdb
7. 清除迁移历史

如果清除迁移历史,可以使用命令:

# 清除迁移历史
tortoise-orm reset

这篇关于FastAPI - Tortoise ORM 数据库基础操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966706

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3