[Python]sqlite3二进制文件存储问题(BLOB)(You must not use 8-bit bytestrings unless you use a text_factory...)

博主在使用Python的sqlite3模块存储加密后的用户名密码(BLOB类型)时遇到错误:sqlite3.ProgrammingError: You must not use 8-bit bytestrings...。官方文档提示,与sqlite3的BLOB对应的数据类型是buffer。通过将加密字节串转换为buffer类型,解决了问题。
摘要由CSDN通过智能技术生成

事情是这样的:


博主尝试用Python的sqlite3数据库存放加密后的用户名密码信息,表是这样的

CREATE TABLE IF NOT EXISTS user
			(
			userID INTEGER PRIMARY KEY AUTOINCREMENT,
			userStudentID BLOB NOT NULL UNIQUE ON CONFLICT IGNORE,
			userPassword BLOB NOT NULL
			);

其中userStudentID and UserPassword 储存成了BLOB类型,作为二进制存储。

但当博主把加密后的字节串插入数据库时,却报出如下错误:

sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

显然它把博主的字节串当成了未经编码的字符串。此时不能参考它的做法,把text_factory 置为 str,这样的话博主的密文就会被编码存放(如utf-8),而如果有些字节无法按utf-8编码的话,就会引发异常或被忽略。


网上搜了好多文章,均没有解决博主的问题。

后来还是找到了Official Document

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值