替换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实例并将其挂载到应用上。还有更多高级用法等待探索。具体的使用方法和示例可以参考其文档或相关教程。