使用os.chdir后无法二次访问SQLite数据库的问题咨询
问题根源及解决方案
这不是os模块和SQLite结合本身的问题,核心是相对路径的解析依赖当前工作目录,而os.chdir()改变了工作目录,导致后续数据库连接的相对路径失效。
具体原因
第一次点击按钮执行rename()时:
- 先调用
fetch_db(),此时程序的工作目录是启动脚本时的目录,相对路径database/database.db能正确找到数据库文件。 - 执行
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
相关产品推荐
相关产品推荐

