繁体   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