最近使用号称 python web 框架中性能最为强悍的框架 sanic , 搭建了项目的基础环境与项目框架,但是在是否使用 ORM 的时候犯了选择困难综合症了,对于一个追求性能的框架,在使用了 ORM 以后必定会对性能有些影响,但是影响究竟有多大呢? ORM 的存在也是有它的理由的, 那么它的优点能否消除它在性能上的损耗呢?
我主要使用了两个 ORM, 与其说是两个,其实也就是一个 sqlalchemy ,但是这里的 sqlalchemy 是两个不同库中的,一个是 aiomysql 中自带的 sqlalchemy, 我简称aiomysql.sa, 一个是大名鼎鼎的 sqlalchemy 库.
数据准备,就是一个简单的 user 表,里面有 id, username.
在查看 sanic 教程 时, 它有提到如何使用 ORM, 它是用中间件的方式在处理每一个请求之前使用sessionmaker 创建了一个 session 挂到请求的上下文中,并且在结束请求时再将 session 关掉
@app.middleware("request")
async def inject_session(request):
request.ctx.session = sessionmaker(bind, AsyncSession, expire_on_commit=False)()
request.ctx.session_ctx_token = _base_model_session_ctx.set(request.ctx.session)
@app.middleware("response")
async def close_session(request, response):
if hasattr(request.ctx, "session_ctx_token"):
_base_model_session_ctx.reset(request.ctx.session_ctx_token)
awai

本文探讨了在Sanic框架中使用ORM(如sqlalchemy)与直接使用SQL进行数据库操作的性能差异。通过压力测试发现,纯SQL的吞吐量是添加session的SQLAlchemy的约2.37倍。尽管ORM提供了方便的数据库迁移和对象解析,但其性能损耗约为20%,尤其是在高并发场景下。对于小型系统和数据库切换需求,ORM可能是合适的选择,但在追求极致性能的项目中,原始SQL更具优势。

1443

被折叠的 条评论
为什么被折叠?



