我运行一个带有sqlalchemy的Flask服务器,并连接到sqlite数据库。
要更新数据库表,我将数据导出到文件中,更新了必要的表,然后再次导入了数据。数据库中的这些数据都是正确的,并且位置正确。 问题在于密码,密码存储为Blob(在sqlalchemy中为大二进制)。
使用密码创建新帐户时,该帐户可立即使用,没有任何问题。 但是,我从旧数据库导入的所有旧密码不再起作用,并引发错误。引发的错误如下:
TypeError: string argument without an encoding
数据库中新密码的类型应为:
<class 'bytes'>
使用迁移的密码,我什至无法检查它是什么类型,因为它在检索该字段时会引发TypeError。
数据存储为blob:password BLOB NOT NULL
无效的密码:$2b$12$CC6OVZTOy3Bc9bsxAeALpuJPc.iZmVwXFB/Cj6.xRlgF2dRdTh11y
工作密码:
$2b$12$NL8reAO7rx1NC5DwgeWVt.ojV0I6czlOKcXAOF87L5NoVsdmOulle
答案 0 :(得分:0)
事实证明,我使用的工具未正确导出数据。然后,由于sqlite没有硬类型强制执行,因此二进制数据丢失了。 我通过再次导出数据并手动将所有字符串转换为它们的字符表示形式并再次导入来解决此问题。