目录
[三.SQLAlchemy ORM使用流程](#三.SQLAlchemy ORM使用流程)
①导入async_sessionmaker,AsyncSession
一.ORM简介
1.什么是ORM?
ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,它允许开发者使用面向对象的编程语言来操作关系型数据库,而不需要直接编写SQL语句。
2.名字的由来
O = Object (对象),指的是python对象
R = Relational (关系的),指的是关系型数据库
M = Mapping(映射),将上面两者(O和R)建立起映射。连起来就是:对象-关系-映射
3.ORM的优势
- 减少重复的sql代码
- 代码更简洁易读
- 自动处理数据库连接和事务
- 自动防止SQL注入攻击
二.python都支持哪些ORM工具?

三.SQLAlchemy ORM使用流程
1.安装
打开pycharm终端(控制台),输入以下命令:
bashpip install sqlalchemy[asyncio] aiomysql

2.建库
我们此处建数据库,还是用sql/数据库管理工具的形式吧,比较方便。


3.建表
①创建数据库引擎

注意:数据库的url,要根据自己的实际情况进行填写。
②定义模型类

然后编写如下代码
python
# 二.定义模型类:基类 + 表对应的模型类
# 1.定义基类
class Base(DeclarativeBase):
create_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now(), default=func.now(), comment="创建时间")
update_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now(), default=func.now(), onupdate=func.now(), comment="修改时间")
# 2.定义表对应的模型类(此时我们要创建【书籍表】)
class Book(Base):
# 定义表名
__tablename__ = "book"
# 定义字段
id: Mapped[int] = mapped_column(primary_key=True, comment="书籍id")
name: Mapped[str] = mapped_column(String(100), nullable=False, comment="书籍名称")
author: Mapped[str] = mapped_column(String(50), nullable=False, comment="作者")
price: Mapped[float] = mapped_column(Float, nullable=False, comment="价格")
publish_time: Mapped[datetime] = mapped_column(DateTime, nullable=False, comment="出版时间")
update_time: Mapped[datetime] = mapped_column(DateTime, nullable=True, comment="更新时间")
注意:上述导包,如下图所示,别导错





③启动应用(项目)时,进行建表操作
python
# 三.定义函数建表(在fastAPI项目启动时,会触发建表)
async def create_tables():
# 获取异步引擎,创建事务来建表
async with async_engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all) # Base模型类的元数据创建
@app.on_event("startup")
async def startup_event():
await create_tables()
4.启动项目,查看数据库是否多出一张名为book的表


5.在路由中使用ORM
①导入async_sessionmaker,AsyncSession

②创建异步会话工厂
python
AsyncSessionLocal = async_sessionmaker(
bind=async_engine,#这个数据库引擎,就是上面自定义的那个
class_=AsyncSession, #指定会话类
expire_on_commit=False #提交后会话不过期,不会重新查询数据库
)
③定义依赖函数,用于获取数据库会话
python
async def get_database():
async with AsyncSessionLocal() as session:
try:
yield session
await session.commit()
except Exception:
await session.rollback()
raise
finally:
await session.close()
④编写接口
这里用到了一个ORM的查询(select),后面会讲到。
python
@app.get("/book/books")
async def get_book_list(db: AsyncSession = Depends(get_database)):
# 查询book表的全部行
result = await db.execute(select(Book))
books = result.scalars().all()
return books
⑤测试效果
手动往数据库的book表,插入一行数据,否则一会看不出来效果。


可见此时成功查出了数据。
以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~