Python(FastAPI)中ORM框架Sqlalchemy的安装及建表
一,项目中安装Sqlalchemy
在项目中执行,就会自动安装
pip install sqlalchemy[asyncio]aiomysql
二,建表
流程
(1)创建数据库引擎
# 1.创建异步引擎#ASYNC_DATAASE_URL为数据库的地址ASYNC_DATAASE_URL="mysql+aiomysql://root:630229@localhost:3306/fast_api_db?charset=utf8"async_engine=create_async_engine(ASYNC_DATAASE_URL,echo=True,# 可选删除SQL日志pool_size=10,#设置连接池活跃的连接数max_overflow=20,# 允许额外的连接数)(2)定义模型类
# 2.定义模型类: 基类+表对应的模型类# 基类:创建时间、更新时间;书籍表:id、书名、作者、价格、出版社classBase(DeclarativeBase):create_time:Mapped[datetime]=mapped_column(DateTime,insert_default=func.now(),default=datetime.now,comment="创建时间")update_time:Mapped[datetime]=mapped_column(DateTime,insert_default=func.now(),onupdate=func.now(),default=datetime.now,comment="修改时间")classBook(Base):__tablename__="book"id:Mapped[int]=mapped_column(primary_key=True,comment="书籍id")bookname:Mapped[str]=mapped_column(String(255),comment="书名")author:Mapped[str]=mapped_column(String(255),comment="作者")price:Mapped[float]=mapped_column(comment="价格")publisher:Mapped[str]=mapped_column(String(255),comment="出版社")(3)启动应用建表
启动命令
uvicorn main:app--reload# 3.启动应用时建表,FASTAPI启动时调用建表的函数asyncdefcreate_tables():#创建异步引擎,创建事务建表asyncwithasync_engine.begin()asconn:awaitconn.run_sync(Base.metadata.create_all)#模型类的元数据@app.on_event("startup")asyncdefstartup_event():awaitcreate_tables()@app.get("/")asyncdefroot():return{"message":"Hello World"}查看建表
表以建成功
或者在Navicat 中查看
完整代码
fromfastapiimportFastAPIfromdatetimeimportdatetimefromsqlalchemyimportString,DateTime,funcfromsqlalchemy.ext.asyncioimportcreate_async_enginefromsqlalchemy.ormimportDeclarativeBase,Mapped,mapped_column app=FastAPI()# 1.创建异步引擎#ASYNC_DATAASE_URL为数据库的地址ASYNC_DATAASE_URL="mysql+aiomysql://root:630229@localhost:3306/fast_api_db?charset=utf8"async_engine=create_async_engine(ASYNC_DATAASE_URL,echo=True,# 可选删除SQL日志pool_size=10,#设置连接池活跃的连接数max_overflow=20,# 允许额外的连接数)# 2.定义模型类: 基类+表对应的模型类# 基类:创建时间、更新时间;书籍表:id、书名、作者、价格、出版社classBase(DeclarativeBase):create_time:Mapped[datetime]=mapped_column(DateTime,insert_default=func.now(),default=datetime.now,comment="创建时间")update_time:Mapped[datetime]=mapped_column(DateTime,insert_default=func.now(),onupdate=func.now(),default=datetime.now,comment="修改时间")classBook(Base):__tablename__="book"id:Mapped[int]=mapped_column(primary_key=True,comment="书籍id")bookname:Mapped[str]=mapped_column(String(255),comment="书名")author:Mapped[str]=mapped_column(String(255),comment="作者")price:Mapped[float]=mapped_column(comment="价格")publisher:Mapped[str]=mapped_column(String(255),comment="出版社")# 3.启动应用时建表,FASTAPI启动时调用建表的函数asyncdefcreate_tables():#创建异步引擎,创建事务建表asyncwithasync_engine.begin()asconn:awaitconn.run_sync(Base.metadata.create_all)#模型类的元数据@app.on_event("startup")asyncdefstartup_event():awaitcreate_tables()@app.get("/")asyncdefroot():return{"message":"Hello World"}