FastAPI与Tortoise ORM整合实战教程

FastAPI与Tortoise ORM整合实战教程

fastapi-tortoiseThe template for building scalable web APIs based on FastAPI, Tortoise ORM and other.项目地址:https://gitcode.com/gh_mirrors/fa/fastapi-tortoise

项目概述

本教程基于GitHub上的开源项目 fastapi-tortoise,旨在指导您如何快速上手一个结合了FastAPI框架和Tortoise ORM(对象关系映射)的Web应用。该项目展示了如何在FastAPI中高效地使用Tortoise ORM进行数据库操作,是构建RESTful API的理想实践。

1. 项目目录结构及介绍

fastapi-tortoise
│── app                  # 应用核心代码
│   ├── models.py        # 定义ORM模型
│   ├── routes.py        # FastAPI路由定义
│   └── schemas.py       # 请求和响应数据的Pydantic模型定义
│
├── config.py            # 配置文件,包含数据库连接等配置
│
├── main.py              # 项目入口,启动FastAPI服务
│
├── requirements.txt     # 项目所需依赖列表
│
└── README.md            # 项目说明文档
  • app/models.py: 包含了利用Tortoise ORM定义的数据模型。
  • app/routes.py: 实现了API端点,处理业务逻辑与请求响应。
  • app/schemas.py: 使用Pydantic定义输入输出数据结构。
  • config.py: 配置文件,存储数据库连接字符串及其他环境特定配置。
  • main.py: 启动程序,初始化FastAPI实例并配置中间件、路由等。
  • requirements.txt: 记录所有必需的Python包及其版本。

2. 项目的启动文件介绍

main.py 项目的主要入口点,负责设置FastAPI的基本架构。关键步骤包括:

  • 引入FastAPI库并创建一个FastAPI实例。
  • config.py导入配置以设置数据库连接。
  • 初始化Tortoise ORM,与数据库建立连接,通常通过调用tortoise.init_db()函数完成。
  • 导入并注册应用的所有路由,这是通过引入app.routes模块并将其添加到FastAPI的应用中实现的。
  • 运行FastAPI服务器,监听指定端口,例如使用uvicorn.run(app, host="localhost", port=8000)

3. 项目的配置文件介绍

config.py 配置文件用于集中管理项目运行时的环境变量和设置,特别是数据库连接信息至关重要。一般结构包括:

DB_URL = "sqlite:///:memory:"  # 示例数据库URL,生产环境中应指向实际数据库路径或服务
DB_MODULES = ["app.models"]    # 指定包含ORM模型的模块路径

def get_settings():
    settings = Settings()
    settings.db_url = DB_URL
    settings.db_modules = DB_MODULES
    return settings
  • DB_URL: 数据源URL,可以是SQLite、MySQL、PostgreSQL等,这里示例为内存中的SQLite数据库。
  • DB_MODULES: 用来告诉Tortoise ORM你的数据模型在哪里,以便自动发现和管理表结构。
  • get_settings() 函数是为了便于不同的环境加载不同的配置,提升代码的可维护性和灵活性。

通过以上三个关键部分的了解,您可以更有效地学习和运用此开源项目,搭建起自己的FastAPI+Tortoise ORM应用。

fastapi-tortoiseThe template for building scalable web APIs based on FastAPI, Tortoise ORM and other.项目地址:https://gitcode.com/gh_mirrors/fa/fastapi-tortoise

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用 FastAPITortoise-ORM、SQLAlchemy 和 peewee 进行 ORM 查询的示例。 ## Tortoise-ORM ```python from fastapi import FastAPI from tortoise import fields from tortoise.contrib.fastapi import register_tortoise, HTTPNotFoundError from tortoise.models import Model from tortoise import Tortoise class User(Model): id = fields.IntField(pk=True) name = fields.CharField(50) email = fields.CharField(50) class Meta: table = "users" app = FastAPI() @app.on_event("startup") async def startup(): await Tortoise.init( db_url="sqlite://db.sqlite3", modules={"models": ["main"]} ) await Tortoise.generate_schemas() @app.on_event("shutdown") async def shutdown(): await Tortoise.close_connections() @app.get("/users") async def get_users(): users = await User.all() return users @app.get("/users/{user_id}") async def get_user(user_id: int): user = await User.get_or_none(id=user_id) if user is None: raise HTTPNotFoundError return user register_tortoise( app, db_url="sqlite://db.sqlite3", modules={"models": ["main"]}, generate_schemas=True, add_exception_handlers=True ) ``` ## SQLAlchemy ```python from fastapi import FastAPI from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) name = Column(String(50)) email = Column(String(50)) engine = create_engine("sqlite:///db.sqlite3") SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) app = FastAPI() @app.get("/users") async def get_users(): db = SessionLocal() users = db.query(User).all() db.close() return users @app.get("/users/{user_id}") async def get_user(user_id: int): db = SessionLocal() user = db.query(User).filter(User.id == user_id).first() db.close() if user is None: raise HTTPNotFoundError return user ``` ## peewee ```python from fastapi import FastAPI from peewee import SqliteDatabase, Model, CharField, IntegerField from playhouse.shortcuts import model_to_dict db = SqliteDatabase("db.sqlite3") class User(Model): id = IntegerField(primary_key=True) name = CharField() email = CharField() class Meta: database = db table_name = "users" app = FastAPI() @app.on_event("startup") def startup(): db.connect() db.create_tables([User]) @app.on_event("shutdown") def shutdown(): db.close() @app.get("/users") async def get_users(): users = [model_to_dict(user) for user in User.select()] return users @app.get("/users/{user_id}") async def get_user(user_id: int): user = User.get_or_none(User.id == user_id) if user is None: raise HTTPNotFoundError return model_to_dict(user) ``` 注意:以上示例中的代码仅用于演示 ORM 查询的基本用法,并且没有进行错误处理。在实际应用中,你应该根据需要添加适当的错误处理和安全性检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣正青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值