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

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

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

相关推荐
曲幽3 小时前
FastAPI实战:用懒加载与Lifespan优雅管理重型依赖
fastapi·async·lifespan·lazy loading·startup event
雪碧聊技术5 小时前
ORM-查询
fastapi·orm·查询
Li emily14 小时前
解决港股实时行情数据 API 接入难题
人工智能·python·fastapi
yuezhilangniao15 小时前
AI智能体全栈开发工程化规范 备忘 ~ fastAPI+Next.js
javascript·人工智能·fastapi
a11177618 小时前
图书借阅管理系统(FastAPI + Vue)
前端·vue.js·fastapi
曲幽1 天前
FastAPI生命周期管理实战:从启动到关闭,如何优雅地管好你的“资源家当”
redis·python·fastapi·web·shutdown·startup·lifespan
极客小云1 天前
【基于AI的自动商品试用系统:不仅仅是虚拟试衣!】
javascript·python·django·flask·github·pyqt·fastapi
a1117762 天前
医院挂号预约系统(开源 Fastapi+vue2)
前端·vue.js·python·html5·fastapi
雪碧聊技术2 天前
FastAPI框架简介、第一个FastAPI程序
fastapi·第一个fastapi项目