簡體   English   中英

flask sqlalchemy 更新 sql 原始命令不提供任何響應

[英]flask sqlalchemy update sql raw command does not provide any response

我正在嘗試使用 flask-sqlalchemy 執行更新,但是當它到達更新腳本時它不會返回任何內容。 似乎腳本掛起或沒有做任何事情。

我試圖在未完成但沒有錯誤的代碼上包裝 try catch。

我給了它 10 分鍾來完成只更新 1 條記錄的更新語句,但由於某種原因它仍然不會做任何事情。

當我取消腳本時,它提供了一個錯誤通信鏈接失敗 (0) (SQLEndTran)但我認為這不是錯誤的根本原因,因為在同一個腳本上,我還有其他 sql 腳本可以正常工作,所以連接到分貝很好

我的腳本所做的是獲取一些我需要處理的文件名列表(我對此沒有任何問題)。 然后使用檢索到的文件名列表,我將查看目錄以檢查文件是否存在。 如果它不存在,我將更新數據庫以標記文件,因為它沒有找到。 這是我遇到問題的地方,它不執行更新也不提供某種錯誤消息。

我什至嘗試為更新腳本創建一個新引擎,但我仍然得到相同的行為。

我還嘗試在執行之前先在 python 中打印出 sql 腳本。 我在我的 sql 瀏覽器上運行了打印的 sql 命令,它運行正常。

代碼非常簡單,我不確定為什么會出現問題。

#!/usr/bin/env python3

from flask_sqlalchemy import sqlalchemy
import glob


files_directory = "/files_dir/"

sql_string = """
    select * 
    from table
    where status is null
    """

# ommited conn_string
engine1 = sqlalchemy.create_engine(conn_string)
result = engine1.execute(sql_string)

for r in result:
    engine2 = sqlalchemy.create_engine(conn_string)
    filename = r[11]
    match = glob.glob(f"{files_directory}/**/{filename}.wav")

    if not match:
        print('no match')

        script = "update table set status = 'not_found' where filename = '" + filename + "' "
        engine2.execute(script)
        engine2.dispose()

    continue

engine1.dispose()

看來,如果我嘗試遍歷 26k 記錄,則腳本不起作用。 但是當我嘗試每次運行批量 2k 記錄時,腳本將起作用。 所以我的 sql 字符串將變為(在查詢中添加前 2000 個)

sql_string = """
    select top 2000 * 
    from table
    where status is null
    """

它是手動的,但它對我有用,因為我只需要運行這個腳本一次。 (我的意思是 13 次)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM