ORM简介、安装、使用流程

目录

一.ORM简介

1.什么是ORM?

2.名字的由来

3.ORM的优势

二.python都支持哪些ORM工具?

[三.SQLAlchemy ORM使用流程](#三.SQLAlchemy ORM使用流程)

1.安装

2.建库

3.建表

①创建数据库引擎

②定义模型类

③启动应用(项目)时,进行建表操作

4.启动项目,查看数据库是否多出一张名为book的表

5.在路由中使用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终端(控制台),输入以下命令:

bash 复制代码
pip 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表,插入一行数据,否则一会看不出来效果。

可见此时成功查出了数据。

以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~

相关推荐
曲幽2 天前
FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚
python·fastapi·web·settings·config·pydantic·.env·dotenv·.env.prod
世界尽头与你2 天前
FastAPI Swagger Api 接口未授权访问漏洞
安全·网络安全·渗透测试·fastapi
rannn_1112 天前
【FastAPI|快速入门】第一个FastAPI程序、路由、参数、相应类型、自定义响应数据格式、异常响应处理
python·ai·fastapi·web·开发
java1234_小锋2 天前
FastAPI + Vue 3 前后端分离:项目设计与工程实践(偏“能落地”的最佳实践)
前端·vue.js·fastapi
曲幽3 天前
FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底
python·upload·fastapi·web·file·chunk·validate·filetype
尘埃落定wf3 天前
FastAPI 鉴权怎么写?中间件和依赖注入一次说清楚
python·中间件·fastapi
曲幽3 天前
FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上
python·fastapi·web·model·field·pydantic·validator·basemodel
L-影4 天前
吃透FastAPI的响应类型
fastapi·响应类型
尘埃落定wf4 天前
用 FastAPI 将 LangChain Agent 封装成对外接口
langchain·fastapi
曲幽6 天前
FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透
python·fastapi·web·async·sqlalchemy·session·crud·sync·with