hth华体会最新登录入口- ios/安卓/手机版app下载—如何使用Python ORM工具SQLAlchemy修复常见的陷阱
日期:2023-04-03 04:12:01 | 人气:
在使用SQLAlchemy时做出的看似很小的选择可能对ORM的性能发生重要影响。工具-关系映射(ORM)使应用法式开发人员的事情越发轻松,这在很大水平上是因为它允许您使用您可能知道的语言(如Python)与数据库交互,而不是使用原始的SQL查询。SQLAlchemy是一个Python ORM工具包,提供使用Python会见SQL数据库的功效。
它是一个成熟的ORM工具,增加了模型关系、强大的查询结构范式、容易序列化等优点。然而,它的易用性使得人们很容易忘记幕后发生的事情。使用SQLAlchemy做出的看似很小的选择可能具有重要的性能影响。
本文解释了开发人员在使用SQLAlchemy时遇到的一些最重要的性能问题,以及如何解决这些问题。仅需要计数时检索整个效果集有时,开发人员只需要对效果举行计数,但不是使用数据库计数,而是获取所有效果,并使用python中的len完成计数。
相反,使用SQLAlchemy的计数方法将在服务器端举行计数,从而淘汰发送到客户机的数据。在前面的例子中挪用all()也会导致模型工具的实例化,如果有足够多的行,模型工具的实例化会很快变得很是昂贵。除非需要更多的计数,否则只需使用count方法。
当您只需要几个列时,就可以检索整个模型在许多情况下,发出查询时只需要几列。无需返回整个模型实例,SQLAlchemy只能获取您感兴趣的列。
这不仅淘汰了发送的数据量,而且制止了实例化整个工具的需要。使用列数据的元组而不是模型可以更快。
在循环内一次更新一个工具制止使用循环来单独更新荟萃。只管数据库可以很是快速地执行单个更新,可是应用法式与数据库服务器之间的往返时间将迅速增加。
通常,在合理的情况下,争取淘汰查询次数。请使用批量更新方法取代。触发级联删除ORM允许对模型上的关系举行简朴的设置,可是有一些微妙的行为可能会令人受惊。
大多数数据库通过外键和种种级联选项来维护关系完整性。SQLAlchemy允许您使用外键和级联选项界说模型,可是ORM有自己的级联逻辑,可以抢占数据库。视察下面的模型:如果删除一个Artist记载将导致ORM对Song表发出delete查询,从而防止由于外键而导致的删除。
这种行为可能成为具有庞大关系和大量记载的瓶颈。包罗passive_deletes选项以确保数据库正在治理关系。可是,请确保您的数据库具有此功效。
例如,SQLite默认情况下不治理外键。在使用急加载时,应使用延迟加载延迟加载是处置惩罚关系的默认SQLAlchemy方法。从上一个例子构建,这意味着加载一个艺术家(Artist)并差别时加载他或她的歌曲(Song)。
这通常是一个好主意,可是如果总是需要加载某些关系,则单独的查询可能会造成浪费。如果允许以延迟方式加载关系,那么像Marshmallow这样的盛行序列化框架可以触发级联查询。
有几种方法可以控制这种行为。最简朴的方法是通过关系函数自己。这将导致左联接被添加到对艺术家(Artist)的任何查询中,因此,歌曲(Song)荟萃将立刻可用。
只管有更多数据返回给客户端,但往返次数可能会少得多。SQLAlchemy为无法接纳这种全面方法的情况提供了更细粒度的控制。joinload()函数可用于在每个查询的基础上切换团结加载。使用ORM举行批量记载导入构建完整模型实例的开销成为导入数千条记载时的主要瓶颈。
想象一下,例如,从一个文件中加载数千首歌曲记载,其中每首歌曲都首先被转换成字典。相反,绕过ORM,仅使用焦点SQLAlchemy的参数绑定功效。提前挪用commit或flush在许多情况下,您需要将子记载与其父记载关联起来,反之亦然。
一种显着的方法是刷新会话,以便为有问题的记载分配一个ID。每个请求提交或刷新多次通常是不须要的,也是不希望的。
数据库刷新涉及强制在数据库服务器上举行磁盘写入,而且在大多数情况下,客户端将阻塞,直到服务器可以确认已写入数据为止。SQLAlchemy可以跟踪关系并在后台治理键。
小结:我希望这一系列常见的陷阱可以资助您制止这些问题,并使您的应用法式平稳运行。通常,在诊断性能问题时,怀抱是关键。
大多数数据库都提供了性能诊断,可以资助您定位问题,好比PostgreSQL pg_stat_statements模块。原文链接:https://opensource.com/article/19/9/common-pitfalls-python。
本文关键词:如何,使用,Python,ORM,工具,SQLAlchemy,修复,常见,hth华体会最新登录入口
本文来源:hth华体会最新登录入口-www.ymrstfzj.com