You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让file watcher找到指定文件后停止并触发SQL存储过程?

解决方案

核心修改点

要实现找到目标文件后停止监控并执行SQL存储过程,需添加目标文件匹配逻辑和循环终止条件,同时修正原代码中变量不一致的问题(原函数参数为my_dir,但内部误用了watchDirectory)。

修改后的完整代码

import time
import re  # 用于匹配带时间戳的文件名模式

def fileWatcher(my_dir: str, pollTime: int):
    # 定义目标文件匹配规则:以Process1_开头、.txt结尾,中间为任意格式的时间戳
    target_pattern = re.compile(r'^Process1_.*\.txt$')
    
    # 首次扫描文件列表,处理程序启动时目标文件已存在的场景
    previousFileList = fileInDirectory(my_dir)
    print('首次扫描文件列表:')
    print(previousFileList)
    
    # 先检查首次扫描结果中是否有目标文件
    for file_name in previousFileList:
        if target_pattern.match(file_name):
            print(f"找到目标文件:{file_name}")
            execute_sql_stored_procedure(file_name)
            return  # 找到后直接退出监控
    
    # 进入循环监控
    while True:
        time.sleep(pollTime)
        newFileList = fileInDirectory(my_dir)
        fileDiff = listComparison(previousFileList, newFileList)
        
        previousFileList = newFileList
        if len(fileDiff) == 0:
            continue
        
        # 遍历新增文件,检查是否包含目标文件
        for file_name in fileDiff:
            if target_pattern.match(file_name):
                print(f"找到目标文件:{file_name}")
                execute_sql_stored_procedure(file_name)
                return  # 终止循环并退出监控
        
        # 若新增的不是目标文件,可继续执行原有处理逻辑(可选保留)
        doThingsWithNewFiles(fileDiff)

# 示例SQL存储过程执行函数(需根据实际数据库环境实现)
def execute_sql_stored_procedure(file_name: str):
    # 替换为你的数据库连接及存储过程调用逻辑
    # 例如使用pyodbc连接SQL Server,或pymysql连接MySQL
    print(f"正在执行SQL存储过程,导入文件:{file_name}")

关键说明

  1. 文件名匹配:用正则表达式精准识别Process1_Timestamp.txt格式的文件,若时间戳有固定格式(如数字、特定日期格式),可调整正则表达式进一步缩小匹配范围。
  2. 首次扫描检查:避免程序启动时目标文件已存在但未被处理的遗漏情况。
  3. 循环终止:找到目标文件后调用return直接退出监控函数,彻底停止循环。
  4. 逻辑解耦:将SQL存储过程执行逻辑封装为独立函数,便于根据实际数据库类型(SQL Server、MySQL等)适配具体实现。

额外优化建议

  • 添加文件完整性校验:比如判断文件大小在一段时间内不再变化,避免导入正在写入的不完整文件。
  • 增加异常处理:捕获目录不存在、数据库连接失败等异常,提升程序稳定性。

内容的提问来源于stack exchange,提问作者SS25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:55:16