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

使用os.chdir后无法二次访问SQLite数据库的问题咨询

问题根源及解决方案

这不是os模块和SQLite结合本身的问题,核心是相对路径的解析依赖当前工作目录,而os.chdir()改变了工作目录,导致后续数据库连接的相对路径失效。

具体原因

第一次点击按钮执行rename()时:

  1. 先调用fetch_db(),此时程序的工作目录是启动脚本时的目录,相对路径database/database.db能正确找到数据库文件。
  2. 执行os.chdir(folder_selection.get())后,程序的当前工作目录切换到了用户选择的文件夹。
    第二次点击按钮时:
    fetch_db()还是用相对路径连接数据库,但此时工作目录已经变了,新目录下不存在database/database.db,自然抛出"unable to open database file"错误。

两种解决方法

方法1:使用数据库的绝对路径

修改fetch_db()函数,用绝对路径指定数据库位置,这样不管工作目录怎么变都能找到:

def fetch_db():
    # 获取当前脚本所在目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接数据库的绝对路径
    db_path = os.path.join(script_dir, "database/database.db")
    connection = sqlite3.connect(db_path)
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM employees")
    emp_rows = cursor.fetchall()
    connection.close()  # 查询操作不需要commit,可省略该步骤
    return emp_rows

方法2:避免使用os.chdir()

直接用用户选择的文件夹路径处理文件,不切换工作目录:

def rename():
    db_data = fetch_db()
    folder_path = folder_selection.get()
    # 后续处理文件时,用os.path.join(folder_path, 文件名)定位文件,示例:
    # for filename in os.listdir(folder_path):
    #     old_path = os.path.join(folder_path, filename)
    #     # 写入你的重命名逻辑...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:35:36