成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 異步 ORM 全解析,一文搞定!

開發(fā)
Tortoise-ORM 是一款 輕量級、異步、易上手 的 Python ORM,適用于 FastAPI、Sanic、Tornado 等異步 Web 框架。

你是否遇到這些問題?

  • SQLAlchemy 太復(fù)雜,想找個輕量級 ORM?
  • 需要在 FastAPI 里操作數(shù)據(jù)庫,但 SQLAlchemy 配置繁瑣?
  • 想在異步項目中優(yōu)雅地操作數(shù)據(jù)庫?

Tortoise-ORM 是一款 輕量級、異步、易上手 的 Python ORM,適用于 FastAPI、Sanic、Tornado 等異步 Web 框架。

本篇文章帶你 從入門到進(jìn)階,徹底掌握 Tortoise-ORM!

目錄結(jié)構(gòu)

tortoise_project/
│── main.py             # 啟動應(yīng)用,初始化數(shù)據(jù)庫
│── db.py               # 負(fù)責(zé)數(shù)據(jù)庫連接
│── models.py           # 定義 ORM 模型
│── crud.py             # 封裝數(shù)據(jù)庫操作(增刪改查)
│── config.py           # 配置數(shù)據(jù)庫信息
│── requirements.txt    # 依賴包列表

代碼拆分合理,結(jié)構(gòu)清晰,方便擴(kuò)展!

安裝 & 配置

(1) 安裝依賴

pip install tortoise-orm aiosqlite

如果使用 MySQL:

pip install aiomysql

如果使用 PostgreSQL:

pip install asyncpg

(2) 配置數(shù)據(jù)庫信息(config.py)

DB_URL = "sqlite://db.sqlite3"  # 這里可以改為 MySQL / PostgreSQL

這樣做的好處:方便更換數(shù)據(jù)庫類型!

(3) 連接數(shù)據(jù)庫(db.py)

from tortoise import Tortoise
from config import DB_URL

async def init_db():
    await Tortoise.init(
        db_url=DB_URL,
        modules={"models": ["models"]}  # 告訴 ORM 去哪里找模型
    )
    await Tortoise.generate_schemas()  # 自動創(chuàng)建表

ORM 需要 init() 初始化數(shù)據(jù)庫,然后 generate_schemas() 自動建表。

定義 ORM 模型(models.py)

from tortoise.models import Model
from tortoise import fields

class User(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=50)
    age = fields.IntField()
    created_at = fields.DatetimeField(auto_now_add=True)

    class Meta:
        table = "users"  # 指定數(shù)據(jù)庫表名

ORM 方式定義表結(jié)構(gòu),避免手寫 SQL!

封裝數(shù)據(jù)庫操作(crud.py)

from models import User

# 插入數(shù)據(jù)
asyncdefcreate_user(name: str, age: int):
    returnawait User.create(name=name, age=age)

# 查詢數(shù)據(jù)
asyncdefget_user(user_id: int):
    returnawait User.get(id=user_id)

# 更新數(shù)據(jù)
asyncdefupdate_user(user_id: int, new_age: int):
    user = await User.get(id=user_id)
    user.age = new_age
    await user.save()

# 刪除數(shù)據(jù)
asyncdefdelete_user(user_id: int):
    user = await User.get(id=user_id)
    await user.delete()

封裝 CRUD,主邏輯更清晰,調(diào)用更方便!

啟動程序(main.py)

import asyncio
from db import init_db
from crud import create_user, get_user

asyncdefmain():
    await init_db()  # 連接數(shù)據(jù)庫

    # 創(chuàng)建用戶
    user = await create_user(name="Alice", age=25)
    print(f"創(chuàng)建用戶:{user.name},ID:{user.id}")

    # 查詢用戶
    found_user = await get_user(user.id)
    print(f"查詢用戶:{found_user.name},年齡:{found_user.age}")

# 運(yùn)行主函數(shù)
asyncio.run(main())

代碼拆分后,main.py 邏輯清晰,可隨時擴(kuò)展!

進(jìn)階操作:一對多 & 多對多

(1) 一對多關(guān)系(User → Post)

class Post(Model):
    id = fields.IntField(pk=True)
    title = fields.CharField(max_length=100)
    user = fields.ForeignKeyField("models.User", related_name="posts")  # 外鍵

ForeignKeyField 定義外鍵關(guān)系,related_name 反向訪問!

(2) 多對多關(guān)系(User ? Course)

class Course(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=100)
    users = fields.ManyToManyField("models.User", related_name="courses")

多對多關(guān)系通過 ManyToManyField 輕松實(shí)現(xiàn)!

Tortoise-ORM vs 其他 ORM

ORM 框架

異步支持

輕量級

易用性

適用場景

Tortoise-ORM

? 原生異步

? 輕量級

? 類 Django ORM

? FastAPI / Sanic / 異步項目

SQLAlchemy

?? 依賴 async 擴(kuò)展

? 復(fù)雜

? API 復(fù)雜

? 復(fù)雜項目

Django ORM

? 僅同步

?? 比較重

? 簡單

? Django 項目

  • 異步項目 → 用 Tortoise-ORM
  • 同步項目 → 用 Django ORM 或 SQLAlchemy

結(jié)語:Tortoise-ORM 讓異步數(shù)據(jù)庫操作更簡單!

Tortoise-ORM 是 FastAPI、Sanic 等異步 Web 框架的最佳 ORM 選擇!

語法簡單,API 直觀,學(xué)習(xí)成本低!

責(zé)任編輯:趙寧寧 來源: Ssoul肥魚
相關(guān)推薦

2020-01-02 16:30:02

Spring BootJava異步請求

2023-07-14 08:00:00

ORMRust ORMSQL

2019-09-23 10:51:14

JavaJava虛擬機(jī)Linux

2021-10-25 16:01:01

Linux設(shè)備樹字符串

2024-01-09 08:24:47

JMM核心線程

2021-03-28 18:40:02

LinuxWindowsJava

2021-08-13 05:50:01

ContainerdDockerKubernetes

2025-04-03 08:30:00

Python數(shù)據(jù)庫ORM

2022-06-10 09:04:24

Python讀取文件代碼

2020-10-29 08:55:04

微服務(wù)

2021-10-06 20:23:08

Linux共享內(nèi)存

2022-08-17 18:25:37

Java分布式搜索引擎

2021-08-31 07:02:20

Diff算法DOM

2023-03-31 13:01:31

PythonCelery驗(yàn)證

2021-09-15 06:55:34

異步LinqC#

2021-04-02 06:17:10

大數(shù)加減乘除數(shù)據(jù)結(jié)構(gòu)算法

2022-04-15 08:03:41

SaaS應(yīng)用管理市場

2021-08-31 07:02:34

數(shù)據(jù)響應(yīng)Vue偵測數(shù)據(jù)變化

2021-04-19 17:32:34

Java內(nèi)存模型

2019-11-24 19:17:06

MySQL異步復(fù)制全同步復(fù)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美自拍日韩 | 亚洲高清av | 日韩区| 九九免费视频 | 国产精品国产精品国产专区不片 | 中文字幕欧美一区 | 久草电影网| hitomi一区二区三区精品 | 国产传媒视频在线观看 | 久久久久国产精品 | 一区二区免费看 | 日韩中文一区二区三区 | 欧美一区二区二区 | 欧美亚洲国语精品一区二区 | 日韩精品| 国产97在线 | 日韩 | 亚洲视频在线一区 | 日韩精品中文字幕在线 | 一区二区三区中文字幕 | 欧美国产中文字幕 | 久久久久久免费毛片精品 | 亚洲+变态+欧美+另类+精品 | 欧美日韩一区二区在线 | 婷婷久久五月天 | 欧美亚洲激情 | 日韩视频福利 | 日韩中文字幕一区 | 午夜精品一区 | 国产成人99av超碰超爽 | 久久久久国产精品一区三寸 | 视频二区 | 一级毛片免费完整视频 | 欧美中文字幕在线观看 | 奇色影视 | 中文精品视频 | 四虎永久影院 | 久操亚洲 | 国产欧美日韩在线观看 | 精品无码久久久久久国产 | 亚洲国产精品va在线看黑人 | 欧美精品乱码99久久影院 |