使用PyGithub上传SQLite3非UTF-8文件到GitHub报错如何解决
问题修复方案
结论
完全可以像上传PNG等二进制文件一样上传SQLite数据库文件,仅需调整文件读取逻辑和适配PyGithub的接口规则即可。
错误根因
原代码使用r(文本只读模式)打开二进制的.db文件,Python会默认以UTF-8编码解码文件内容,而SQLite属于二进制文件,包含大量非UTF-8格式的字节内容,因此触发UnicodeDecodeError编码错误。
修复步骤
- 把文件读取模式从
r调整为rb(二进制只读模式),直接读取原始二进制字节,不需要经过编码解码流程 - 注意区分文件状态:仓库中已存在
server.db时调用update_file接口更新,仓库中没有该文件时需要调用create_file接口首次创建
修复后代码
场景1:更新仓库中已存在的server.db
import github # 二进制模式读取本地db文件 with open('server.db', 'rb') as file: content = file.read() g = github.Github('你的GitHub访问令牌') repo = g.get_user().get_repo("my-repo") # 获取仓库中已有文件的sha值 file = repo.get_contents("server.db") # 直接传入二进制content即可,PyGithub会自动处理 repo.update_file("server.db", "Python上传SQLite数据库", content, file.sha, branch="main")
场景2:首次上传新的server.db到仓库
import github with open('server.db', 'rb') as file: content = file.read() g = github.Github('你的GitHub访问令牌') repo = g.get_user().get_repo("my-repo") # 首次创建文件不需要传入sha参数 repo.create_file("server.db", "Python首次上传SQLite数据库", content, branch="main")
注意事项
GitHub普通文件上传单文件大小限制为100MB,如果你的server.db文件超过该大小,会上传失败,建议使用Git LFS存储大体积的二进制文件。
内容的提问来源于stack exchange,提问作者mooncdx
相关产品推荐
相关产品推荐

