sqlalchemy,postgres和unicode:为什么我需要在存储到字符串列之前显式解码?

时间:2016-11-15 04:54:05

标签: python postgresql encoding utf-8

我正在使用带有python 3.5和postgresql的cookie cutter烧瓶应用程序。 Postgresql在docker镜像上运行,没有配置修改。 psql告诉我数据库是utf-8。在使用SQLALCHEMY_NATIVE_UNICODE = True

之前,我收到了字符串编码错误

sqlalchemy专栏是:

  password = Column(db.String(256 ), nullable=True)

和postgresql编码是UTF-8

我在密码验证中收到了Value Error无效的salt。似乎读取数据库值,然后在发送到bcrypt进行哈希验证之前将其转换为编码为UTF-8的字节。似乎bcrypt函数使用字节。也许bcrypt在获取字符串时会自行执行此操作,并且可能默认为utf-8(代码并未明确提供编码)。

Be.low是存储哈希的标准代码。它接受bcrypt.generate_password_hash(密码)返回的值,但是,它在编码后会被破坏。

def set_password(self, password):
        """Set password."""
        self.password = bcrypt.generate_password_hash(password)

并修复了它:

def set_password(self, password):
        """Set password."""
        self.password = bcrypt.generate_password_hash(password).decode('utf-8')

我真的不明白这是怎么允许的。为了使这个工作我解码它,然后它由“东西”处理,期望utf-8。当我不给它utf-8时,它应该是一个例外,不应该吗?

相关问题:flask-bcrypt - ValueError: Invalid salt

0 个答案:

没有答案