开发Telegram Bot遇sqlite3无法打开数据库文件错误求助
解决
sqlite3.OperationalError: unable to open database file错误 问题背景
开发Telegram Bot(基于GitHub代码)时,遇到sqlite无法打开数据库文件的错误,错误栈指向Pyrogram的FileStorage.open()方法中的sqlite3.connect()调用。
错误信息
Traceback (most recent call last): File "G:\Spotify Downloader\mbot\__main__.py", line 30, in <module> Mbot().run() File "G:\Spotify Downloader\venv\lib\site-packages\pyrogram\methods\utilities\run.py", line 80, in run run(self.start()) File "G:\Python\lib\asyncio\base_events.py", line 646, in run_until_complete return future.result() File "G:\Spotify Downloader\mbot\__init__.py", line 76, in start await super().start() File "G:\Spotify Downloader\venv\lib\site-packages\pyrogram\methods\utilities\start.py", line 58, in start is_authorized = await self.connect() File "G:\Spotify Downloader\venv\lib\site-packages\pyrogram\methods\auth\connect.py", line 40, in connect await self.load_session() File "G:\Spotify Downloader\venv\lib\site-packages\pyrogram\client.py", line 562, in load_session await self.storage.open() File "G:\Spotify Downloader\venv\lib\site-packages\pyrogram\storage\file_storage.py", line 58, in open self.conn = sqlite3.connect(str(path), timeout=1, check_same_thread=False) sqlite3.OperationalError: unable to open database file
排查与解决步骤
1. 验证数据库路径与目录权限
- 打印确认路径:在
FileStorage.open()方法开头添加路径打印,确认生成的数据库文件路径是否正确:
检查输出路径是否存在拼写错误、是否包含特殊字符或空格。async def open(self): path = self.database print(f"Target database path: {path}") # 新增打印 file_exists = path.is_file() # 后续代码不变 - 确保目录存在:数据库文件所在的工作目录(
workdir)必须存在,否则sqlite无法创建文件。可以在代码中提前创建目录:async def open(self): path = self.database path.parent.mkdir(parents=True, exist_ok=True) # 确保父目录存在 file_exists = path.is_file() # 后续代码不变 - 检查目录权限:右键工作目录→属性→安全,确保当前运行Python的用户拥有读写权限,必要时勾选「完全控制」。
2. 处理文件锁定或占用
- 删除旧session文件:如果程序之前异常崩溃,可能导致
.session文件被锁定。手动删除对应路径下的.session文件,重新运行程序。 - 检查进程占用:确认没有其他程序(如文件管理器、杀毒软件)正在读取或修改该
.session文件,关闭相关进程后重试。
3. 规避路径格式问题
- 移除路径空格:Windows系统中,路径包含空格可能导致解析异常。尝试将工作目录改为无空格路径(如
G:\SpotifyDownloader\mbot),重新配置程序路径后运行。
4. 虚拟环境权限排查
- 管理员身份运行:如果使用虚拟环境(venv),尝试以管理员身份启动命令行,再运行Python脚本,避免权限不足问题。
- 检查虚拟环境目录权限:确认虚拟环境所在文件夹的权限设置,确保当前用户可读写其中文件。
内容的提问来源于stack exchange,提问作者Anshul Gada
相关产品推荐
相关产品推荐

