Tortoise ORM入门之理论篇

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Tortoise ORM入门之理论篇

最近在做 python 开发的时候,发现一个非常好用的 ORM 框架《Tortoise ORM》。它是是一个受 Django 启发的易于使用的异步 ORM(对象关系映射器),它的设计中有着这样一句话:“你不仅要处理表,还要处理关系数据"。 ORM(对象关系映射器)旨在解决这些问题,通过集中您的数据模型和数据规则,确保您的数据得到安全管理(提供对 SQL 注入的免疫力)并跟踪关系,因此您不必。

介绍

  • Tortoise ORM 是受 Django 启发的易于使用的 asyncioORM (对象关系映射器) 。

  • Tortoise ORM 的构建类似于 Django ORM。它的设计中不仅使用表格,还使用关系数据。

  • 与其他 Python ORM 相比,它也表现良好,与 Pony ORM 进行交易:

Tortoise ORM 支持那些数据库

Tortoise 当前支持以下数据库:

  • SQLite (using aiosqlite)
  • PostgreSQL >= 9.4 (using asyncpg or psycopg)
  • MySQL/MariaDB (using asyncmy)
  • Microsoft SQL Server (using asyncodbc)

环境配置

pip install tortoise-orm

# 安装数据库驱动
pip install tortoise-orm[asyncpg]
pip install tortoise-orm[aiomysql]
pip install tortoise-orm[asyncmy]
# 除此之外,还支持:aiosqlite

数据库链接

sqlite

通常采用以下形式sqlite://DB_FILE因此,如果 DB_FILE 为/data/DB.sqlite3,则字符串将为sqlite:///data/db.sqlite3(注意三个/)

mysql

mysql://user:password@host:3306/somedb
  • user:用于连接的用户名
  • password: 用户名的密码。
  • host:数据库所在的网络主机
  • port:数据库可用的网络端口.(默认为 3306)
  • database:要使用的数据库。

postgres

postgres 数据库通常采用以下形式:

asyncpg://postgres:pass@db.host:5432/somedb #异步
psycopg://postgres:pass@db.host:5432/somedb #同步

mssql

mssql 数据库通常采用以下形式:

mssql://user:pass@host:1433/db?driver=theodbcdriver
  • user: 用于连接的用户名
  • password: 用户名的密码。
  • host: 数据库所在的网络主机
  • port: 数据库可用的网络端口。(默认为 1443)
  • database: 要使用的数据库。
  • driver: 要使用的 ODBC 驱动程序。ODBC 驱动程序的实际名称 odbcinst.ini 文件(您可以使用最小值命令)。它要求 Unix 数据中心安装在您的系统中。

创建数据库

from tortoise import Tortoise, run_async

async def init():
    # Here we create a SQLite DB using file "db.sqlite3"
    #  also specify the app name of "models"
    #  which contain models from "app.models"
    await Tortoise.init(
        db_url='sqlite://db.sqlite3',
        modules={
   'models': ['models']}
    )
    # Generate the schema
    await Tortoise.generate_schemas()  # safe:仅在表不存在时创建表

run_async(init())  # 会自动进入上下文处理,在运行完成时,自动关闭数据库连接

如果要使用 MySQL 就要安装依赖pip install tortoise-orm[aiomysql]

创建模型

from tortoise.models import Model
from tortoise.manager import Manager

class Team(Model):
    id = fields.IntField(pk=True)
    name = fields.TextField()

    class Meta:
        abstract = False
        table = "team"
        table_description = ""
        unique_together = ()
        indexes = ()
        ordering = []
        manager = Manager
  • abstract:设置为 True 表明这是一个抽象类,不会生成数据表
  • table:设置表名,不设置默认已类名作为数据表名
  • table_description:设置此项可为为当前模型创建的表生成注释消息
    unique_together : 指定 unique_together 为列集设置复合唯一索引,其为元组的元组
  • indexes:指定 indexes 为列集设置复合非唯一索引,它应该是元组的元组
  • ordering : 指定 ordering 为给定模型设置默认排序。.order_by(...)它应该可以迭代以与接收相同的方式格式化的字符串。
  • manager: 指定 manager 覆盖默认管理器。它应该是实例 tortoise.manager.Manager 或子类。

字段

更详细的信息可以查看[官方文档]

数据字段

Field(source_field = None , generated = False , pk = False , null = False , default = None , unique = False , index = False , description = None , model = None , validators = None , ** kwargs
  • source_field (Optional[str]): 如果 DB 列名称需要是特定的而不是从字段名称中生成,则提供 source_field 名称。
  • generated (bool): 该字段是否由数据库生成
  • pk (bool): 该字段是否为主键
  • null (bool): 主键是否可以为空
  • default (Optional[Any]):该字段的默认值
  • unique (bool) :该字段的值是否唯一
  • index (bool):设置该字段是否为索引
  • description (Optional[str]) :字段描述,也将出现在Tortoise.desc> ribe_model()生成的 DDL 中并作为 DB 注释出现。
  • validators (Optional[List[Union[Validator, Callable]]]) :此字段的验证器

关系字段

ForeignKeyField( model_name , related_name = None , on_delete = 'CASCADE' , db_constraint = True , ** kwargs )

OneToOneField( model_name , related_name = None , on_delete = 'CASCADE' , db_constraint = True , ** kwargs )
  • model_name:关联模型的名称{app}.{models}
  • related_name:相关模型上的属性名称,用于反向解析外键
  • on_delete
  • field.CASCADE:表示如果相关模型被删除,该模型应该被级联删除
  • field.RESTRICT:表示只要有外键指向,相关模型删除就会受到限制
  • field.SET_NULL:将字段重置为 NULL,以防相关模型被删除。仅当字段已设置时才能null=True设置
  • field.SET_DEFAULT:将字段重置为default值,以防相关模型被删除。只能设置是字段有一个default集合
  • to_field:建立外键关系的相关模型上的属性名。如果未设置,则使用pk
  • db_constraint: 控制是否应在数据库中为此外键创建约束。默认值为 True,将此设置为 False 可能对数据完整性非常不利
ManyToManyField(model_name, through=None, forward_key=None, backward_key='', related_name='', on_delete='CASCADE', db_constraint=True, **kwargs)
  • through:通过中间表进行连接
  • forward_key: 直通表上的正向查找键。默认值通常是安全的
  • backward_key: 通表上的向后查找键。默认值通常是安全的

查询

模型本身有几种方法可以启动查询:

  • filter(*args, **kwargs):使用给定的过滤器创建 QuerySet
  • exclude(*args, **kwargs):使用给定的排除过滤器创建 QuerySet
  • all():创建不带过滤器的查询集
  • first():创建仅限于一个对象的查询集并返回实例而不是列表
  • annotate(): 使用额外的函数/聚合对结果进行再过滤

其中filter可以指定的对象:

  • in:检查字段的值是否在传递列表中
  • not_in: 检查字段的值是不在传递列表中
  • gte:大于或等于传递的值
  • gt:大于传递值
  • lte:低于或等于传递的值
  • lt:低于通过值
  • range:介于和给定两个值之间
  • isnull:字段为空
  • not_isnull:字段不为空
  • contains:字段包含指定的子字符串
  • icontains:不区分大小写contains
  • startswith:如果字段以值开头
  • istartswith:不区分大小写startswith
  • endswith:如果字段以值结尾
  • iendswith:不区分大小写endswith
  • iexact:不区分大小写等于
  • search:全文搜索

Q 对象

Q( * args , join_type = 'AND' , ** kwargs )
  • join_type:连接类型,OR\AND
  • args ( Q) :Q要包装的内部表达式
  • kwargs ( Any) :此 Q 对象应封装的过滤语句
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 关系型数据库 MySQL
Python 数据库访问与ORM框架——打造高效开发利器
Python 作为一门广泛使用的编程语言,其在数据库访问方面也有着较为成熟的解决方案,其中ORM框架更是成为了开发者们的首选。本文将介绍 Python 中数据库访问和 ORM 框架的基本概念,以及如何使用 SQLAlchemy 这一优秀的 ORM 框架进行开发。
|
存储 消息中间件 缓存
9 个 FastAPI 的必知资源
FastAPI 是 Python 开发人员最新、最流行的 API 框架之一。我们的工程师一次又一次需要将一个或多个第三方库与我们的 API 结合使用,以附加额外的功能和特性来丰富我们的项目。
1135 0
|
数据库
FastAPI的数据库操作终于整明白了!
FastAPI的数据库操作终于整明白了!
3559 0
FastAPI的数据库操作终于整明白了!
|
6月前
|
JavaScript 中间件 测试技术
FastAPI全面指南:从入门到企业级应用实战
FastAPI正迅速成为Python Web开发领域的明星框架。它以高性能、高效率和现代化特性著称,性能媲美Go/Node.js,支持异步编程并内置自动化文档系统。本文全面解析FastAPI核心功能,包括类型安全路由、Pydantic数据验证、异步支持等,并通过实战案例展示其在RESTful API开发、微服务架构、实时数据处理及机器学习模型部署中的应用。同时,文章提供数据库集成、中间件配置和测试策略等最佳实践,解决常见问题并展望未来技术发展方向。掌握FastAPI,助你构建高效现代化Web应用。
1001 1
|
安全 API 数据库
Python中的Tortoise ORM框架:高效、灵活的数据库交互新选择
【4月更文挑战第14天】在Python的数据库交互领域中,对象关系映射(ORM)框架扮演着举足轻重的角色。近年来,随着技术的不断发展和进步,众多ORM框架如雨后春笋般涌现,其中Tortoise ORM以其高效、灵活的特性受到了广大开发者的青睐。本文将深入探讨Tortoise ORM框架的核心特性、使用方法以及其在Python开发中的应用。
2287 4
|
9月前
|
关系型数据库 API 数据库
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
1035 4
|
9月前
|
数据挖掘 测试技术 项目管理
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案
Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对 30 人以下团队免费。它通过整合迭代、看板、度量和自动化等功能,简化测试协同工作,使敏捷测试更易于实施。并提供低成本的敏捷测试解决方案,如同步在线离线测试用例、流程化管理缺陷、低代码接口自动化测试和 CI/CD,以及基于迭代的测试管理和测试用时的成本计算等,践行敏捷测试。
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案
|
数据库
Tortoise ORM 和 Aerich 使用文档参考表
【8月更文挑战第15天】
620 1
|
10月前
|
SQL 程序员 Linux
推荐几个不错的数据库设计工具
推荐几个不错的数据库设计工具
705 11
|
12月前
|
前端开发 JavaScript API
2025年前端框架是该选vue还是react?有了大模型-例如通义灵码辅助编码,就不用纠结了!vue用的多选react,react用的多选vue
本文比较了Vue和React两大前端框架,从状态管理、数据流、依赖注入、组件管理等方面进行了详细对比。当前版本和下载量数据显示React更为流行,但Vue在国内用户量增长迅速。Vue 3通过组合式API提供了更灵活的状态管理和组件逻辑复用,适合中小型项目;React则更适合大型项目和复杂交互逻辑。文章还给出了选型建议,强调了多框架学习的重要性,认为技术问题已不再是选型的关键,熟悉各框架的最佳实践更为重要。
6883 1