VSCode运行Python脚本时sqlite3相对路径异常及解决方案安全性咨询
问题解答
(1)CWD与SQLite路径解析原因
- VSCode默认运行配置的
cwd(当前工作目录)参数默认值为${workspaceFolder},也就是你打开的工作区根目录。不管你启动的脚本在哪个子目录,终端启动时的工作路径会被自动设置为工作区根目录,所以执行os.path.abspath(".")返回的都是根目录路径。 - 相对路径解析是Python的通用规则,而非SQLite3的特有逻辑:所有传入的相对路径字符串,Python都会默认基于当前运行进程的CWD转换为绝对路径,SQLite3仅接收最终转换后的绝对路径操作数据库,不会主动基于脚本文件位置修正路径。
(2)现有方案的安全性与可移植性评估
安全性
该方案本身逻辑安全,__file__是Python内置的当前脚本文件路径属性,只要脚本本身未被恶意篡改,不存在路径注入之类的安全风险。
可移植性
你当前的写法存在可移植性问题:反斜杠\是Windows系统的路径分隔符,在Linux、macOS等类Unix系统中路径分隔符为正斜杠/,直接拼接字符串会导致在非Windows系统下路径解析错误,无法正常找到数据库文件。
优化写法推荐
推荐使用系统自适应的路径拼接方法,兼容全平台:
os模块优化版
import os import sqlite3 path = os.path.dirname(__file__) # 用os.path.join自动适配不同系统的路径分隔符 db_path = os.path.join(path, "data.db") con = sqlite3.connect(db_path)
pathlib模块(Python 3.4+ 更推荐)
from pathlib import Path import sqlite3 # 写法更简洁,自动适配跨平台路径规则 db_path = Path(__file__).parent / "data.db" con = sqlite3.connect(db_path)
内容的提问来源于stack exchange,提问作者crumpi
相关产品推荐
相关产品推荐

