第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重復相同的數據庫查詢將返回增量結果

重復相同的數據庫查詢將返回增量結果

元芳怎么了 2022-08-25 14:41:34
在長時間運行的 while 循環(huán)中,我正在嘗試檢查與我的標準匹配的第 1 條記錄,以便對其執(zhí)行操作。出于簡單起見,查詢的篩選器方面已從下面的代碼中刪除,無論哪種方式,我都會遇到相同的問題)。在下面的代碼段中: while True:    time.sleep(2)    item = Session.query(Model).order_by(Model.id.asc()).first()    print(f'Item id: {item.id}')作為輸出,我想實現的是:Item id: 1Item id: 1Item id: 1相反,我得到的是這個:Item id: 1Item id: 2Item id: 3我做錯了什么?我不明白為什么當我甚至沒有對表數據進行任何更新時,它會移動到NEXT記錄。我甚至不確定在Google中搜索什么術語來嘗試解決此問題...我嘗試過在 上使用,但這似乎沒有任何區(qū)別。flush()Session如果這很重要,這些是我正在使用的導入是:from flask import Flaskfrom sqlalchemy import create_enginefrom sqlalchemy.orm import scoped_sessionfrom sqlalchemy.orm import sessionmakerimport os, time, sys
查看完整描述

1 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

好吧,雖然我還沒有讀到為什么它表現成這樣,但至少現在我終于找到了解決問題需要做些什么:


一旦每次迭代中的查詢都實現了其目的(在我的情況下,從需要處理的數據庫中獲取第一條記錄,然后對其進行處理),我接下來需要調用以下內容:并解決了我的問題。session.expire_all()


因此,在我上面的示例中,它現在應該如下所示:


def main():

    while True:

        item = Session.query(Queue).order_by(Queue.id.asc()).filter_by(status=0).first()

        if item:

            try:

                item.status = 1

                Session.commit()

                print(f'Item id: {item.id}')

                Session.expire_all() # <---- Add this line

            except:

                print('error')

        time.sleep(2)

這是SQLAlchemy文檔中大致指向這個方向的部分:SQLAlchemy - Refreshing / Expireing


查看完整回答
反對 回復 2022-08-25
  • 1 回答
  • 0 關注
  • 80 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號