替换fastapi doc 模版


一、集思广益

关于FastAPI操作数据库的文章,网络上已经有很多资源。FastAPI因其原生支持异步操作以及Pydantic标准格式校验,深受开发者喜爱。那么,如何在这个基础上支持异步数据库操作并且继续利用Pydantic的优势呢?FastAPI能否像Django一样拥有强大的admin后台,实现对数据库表的快速CRUD操作呢?

二、SQLModel的利用

为了解决这个问题,我们引入了SQLModel库。SQLModel是一个通过Python代码和Python对象与SQL数据库进行交互的库。其设计原则是直观、易用、高度兼容和强大。

SQLModel基于Python类型注释,由Pydantic和SQLAlchemy提供支持。主要特点包括:

1. 编写直观:强大的编辑器支持,减少调试时间,易于学习和使用,减少阅读文档的时间。

2. 易用性:具有合理的默认值,简化底层工作,让编写的代码更加简洁。

3. 兼容性:与FastAPI、Pydantic和SQLAlchemy兼容。

4. 可扩展性:拥有SQLAlchemy和Pydantic的所有功能。

下面是一个配置示例代码:

python

from sqlalchemy.orm import declarative_base

from sqlmodel import create_engine

sqlite_file_name = "alert.db"

sqlite_url = f"sqlite:///{sqlite_file_name}"

mysql_url = 'mysql+mysqlconnector://root:.0.1:3306/alert_test_db'

engine = create_engine(mysql_url, echo=True)

Base = declarative_base()

接下来是一个模型示例代码:

python

from typing import List, Optional

from sqlmodel import Field, Relationship, SQLModel, create_engine

class HeroTeamLink(SQLModel, table=True):

team_id: Optional[int] = Field(default=None, foreign_key="team.id", primary_key=True)

hero_id: Optional[int] = Field(default=None, foreign_key="hero.id", primary_key=True)

class Team(SQLModel, table=True):

id: Optional[int] = Field(default=None, primary_key=True)

name: str = Field(index=True)

headquarters: str

heroes: List["Hero"] = Relationship(back_populates="teams", link_model=HeroTeamLink)

class Hero(SQLModel, table=True):

id: Optional[int] = Field(default=None, primary_key=True)

name: str = Field(index=True)

secret_name: str

age: Optional[int] = Field(default=None, index=True)

teams: List[Team] = Relationship(back_populates="heroes", link_model=HeroTeamLink)

三、关于fastapi-amis-admin的介绍与使用

fastapi-amis-admin是一个拥有高性能、高效率、易扩展的FastAPI管理后台框架。它启发自Django-Admin,并具备同样强大的功能。以下是其使用的一些基本步骤:安装fastapi-amis-admin库,创建一个FastAPI应用实例,创建一个AdminSite实例并将其挂载到应用上。还有更多高级用法等待探索。具体的使用方法和示例可以参考其文档或相关教程。