FastAPI - Tortoise ORM 数据库基础操作
创始人
2025-01-15 10:36:16
0次

文章目录

      • 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_creator  class 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_async  async 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 fields  class MyModel(Model):     id = fields.IntField(pk=True) 
2. fields.BigIntField

用于定义大整数字段。

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

用于定义小整数字段。

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

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

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

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

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

用于定义布尔字段。

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

用于定义浮点数字段。

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

用于定义精确小数字段。

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

用于定义日期时间字段。

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

用于定义日期字段。

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

用于定义时间字段。

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

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

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

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

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

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

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

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

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

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

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

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

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


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 

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...