Pyrogram Client启动报sqlite3.OperationalError无法打开数据库文件
报错根因
抛出sqlite3.OperationalError: unable to open database file是因为Pyrogram在初始化阶段无法创建/读取用于存储登录会话的SQLite数据库文件,常见触发场景:
- 初始化Client时传入的名称为
occasion,Pyrogram默认会在脚本执行时的工作目录下生成occasion.session数据库文件,当前工作目录无写入权限(比如脚本放在C盘系统保护目录、Program Files文件夹下,普通用户身份无修改权限) - 之前运行脚本异常退出,残留的
occasion.session文件被锁或损坏,无法被SQLite引擎正常打开 - 代码未显式指定session文件存储路径,运行时工作目录被动态切换到了不存在/不可写的路径
- 额外注意:当前代码未导入
os模块、且api_id从环境变量读取后是字符串类型(Pyrogram要求api_id为整数),这两个问题会在数据库问题修复后触发其他报错,需要同步修正。
修复方案
- 第一步:显式指定session文件的绝对存储路径,放到当前用户有完整读写权限的目录,同时补全缺失的导入、修正
api_id类型,参考代码:
import os from pyrogram import Client # 将session文件存到当前用户的主目录,规避工作目录权限问题 session_file = os.path.expanduser("~/occasion.session") client = Client( session_file, api_id=int(os.environ.get("TG_API_ID")), api_hash=os.environ.get("TG_API_HASH") ) client.start() client.send_message("me", "some_message_text") client.stop()
- 第二步:打开任务管理器,结束所有残留的Python进程,删除之前生成的损坏/被锁的
occasion.session文件后重新运行脚本 - 第三步:如果仍报错,右键点击脚本所在文件夹,打开「属性-安全」选项卡,确认当前Windows登录账号对该文件夹有读取、写入、修改权限,不要把脚本放在C盘根目录、Program Files等系统受保护路径下运行。
内容的提问来源于stack exchange,提问作者artirchique
相关产品推荐
相关产品推荐

