91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flask中如何優化SQL

發布時間:2022-10-11 17:19:03 來源:億速云 閱讀:121 作者:iii 欄目:web開發

這篇文章主要介紹“Flask中如何優化SQL”,在日常操作中,相信很多人在Flask中如何優化SQL問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Flask中如何優化SQL”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在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
<User(name='jack', fullname='Jack Bean', nickname='gjffdd')>

>>> jack.addresses
[<Address(email_address='jack@google.com')>, <Address(email_address='j25@yahoo.com')>]

到此,關于“Flask中如何優化SQL”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀仁县| 阿合奇县| 遂川县| 邢台市| 文登市| 咸宁市| 册亨县| 潼南县| 麻城市| 临安市| 尼木县| 新安县| 辽源市| 湟源县| 桦甸市| 南溪县| 东乡| 信阳市| 团风县| 湟中县| 建宁县| 乐业县| 郁南县| 神池县| 来安县| 全南县| 阳高县| 磴口县| 门源| 平谷区| 井冈山市| 姚安县| 剑阁县| 呈贡县| 莒南县| 靖宇县| 云浮市| 陵水| 昌邑市| 通河县| 昌都县|