使用Tortoise及Fastapi构建一个简单的wms软件
Tortoise ORM 简介
Tortoise ORM 是一个 Python 数据库 ORM 框架,它提供了一种简单的方式来操作数据库,并支持多种数据库,如 MySQL、PostgreSQL、SQLite 等。
Tortoise ORM 安装
Tortoise ORM 可以通过 pip 安装:
pip install tortoise-orm[asyncmy]
- asyncmy: 使用 asyncmy 库,用于连接Mysql数据库
Tortoise ORM 特性
- 异步支持
- Tortoise ORM 专门为异步框架设计,它利用了Python的asyncio模块,可以高效的处理并发数据库操作。
- 特别适合与FastAPI web框架搭配使用
- 自动生成表结构
- 可以根据模型自动生成数据库表结构,避免手动创建表结构,但是企业级应用建议关闭
Tortoise ORM 与 SQLAlchemy 的对比
- Tortoise ORM 是一个异步的 ORM 框架,它利用了 Python 的 asyncio 模块,可以高效的处理并发数据库操作。
- SQLAlchemy 是一个同步的 ORM 框架,它利用了 Python 的 threading 模块,可以处理并发数据库操作,但是它不是异步的。
- 在 SQLAlchemy 1.4 版本中,它已经支持了异步操作,但是是基于同步基础上进行的二次封装
创建router_good
from fastapi import APIRouter
from fastapi.params import Query
from app.fastapidemo.service.wms.models import Goods
router = APIRouter()
@router.get("/" ,tags=["商品管理"],description= "商品管理")
def goods_default():
return {
"goods": "goods"}
创建router_warehouse
from datetime import datetime
from fastapi import APIRouter
from pydantic import BaseModel
from app.fastapidemo.service.wms.models import Warehouse
router = APIRouter()
class WarehouseCreate(BaseModel):
name: str
@router.get("/", tags=["仓库管理"], description="仓库管理")
def warehouse_default():
return {
"warehouse": "warehouse"}
@router.get("/warehouses")
async def get_warehouse():
date = await Warehouse.all()
return date
创建 main.py
并注册Tortoise
from fastapi import FastAPI
from router_goods import router as router_goods
from router_warehouse import router as router_warehouse
from tortoise.contrib.fastapi import register_tortoise
app = FastAPI()
app.include_router(router_warehouse,prefix="/warehouse",tags=["仓库管理"])
app.include_router(router_goods,prefix="/goods",tags=["商品管理"])
try:
register_tortoise(
app,
db_url="mysql://root:[pass_word]@[ip]:3306/[db_name]", # 替换为你的数据库名称
modules={
"models": ["app.fastapidemo.service.wms.models"]}, # 指定包含的 models 模块
generate_schemas=False, # 不自动生成表结构
add_exception_handlers=True # 添加异常处理程序
)
print("Tortoise ORM registered successfully.")
except Exception as e:
print(f"Failed to register Tortoise ORM: {
e}</