Flask中如何优化SQL

这篇文章主要介绍“Flask中如何优化SQL”,在日常操作中,相信很多人在Flask中如何优化SQL问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flask中如何优化SQL”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联建站是一家专业提供泉山企业网站建设,专注与做网站、成都做网站、H5高端网站建设、小程序制作等业务。10年已为泉山众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

在django中,我们可以使用 select_related和prefetch_related方法来做sql优化(以最少的sql查出所有需要的数据)如:select_related将会根据外键关系,在执行查询语句的时候通过创建一条包含SQL inner join操作的SELECT语句来一次性获得主对象及相关对象的信息,在Flask中,通过阅读文档,发现在SQLAlchemy的官网中有说到三种方法来做,类似django中的select_relatedprefetch_related

急切加载:注意此方法应该适当使用,不同于django中的方法,会额外拆分出一条IN查询

回想一下,我们之前演示了延迟加载操作,当我们访问 a 的User.addresses集合User并发出 SQL 时。如果你想减少查询的数量(在很多情况下是显着的),我们可以对查询操作应用一个急切的负载。SQLAlchemy 提供三种类型的预加载,其中两种是自动的,第三种涉及自定义标准。这三个通常通过称为查询选项的函数调用,这些函数Query通过该方法为我们希望如何加载各种属性提供额外的说明Query.options()。

选择加载

在这种情况下,我们想指出User.addresses应该立即加载。加载一组对象及其相关集合的一个不错的选择是selectinload()选项,它发出第二个 SELECT 语句,完全加载与刚刚加载的结果关联的集合。名称“selectin”源于 SELECT 语句使用 IN 子句来一次定位多个对象的相关行的事实:

>>> from sqlalchemy.orm import selectinload
>>> jack = session.query(User).\
...                 options(selectinload(User.addresses)).\
...                 filter_by(name='jack').one()

SELECT users.id AS users_id,
        users.name AS users_name,
        users.fullname AS users_fullname,
        users.nickname AS users_nickname
FROM users
WHERE users.name = ?
[...] ('jack',)
SELECT addresses.user_id AS addresses_user_id,
        addresses.id AS addresses_id,
        addresses.email_address AS addresses_email_address
FROM addresses
WHERE addresses.user_id IN (?)
ORDER BY addresses.id
[...] (5,)
>>> jack


>>> jack.addresses
[]

到此,关于“Flask中如何优化SQL”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网站栏目:Flask中如何优化SQL
转载注明:http://pwwzsj.com/article/gigegc.html