如何在googleappengine中按ByteString字段查询过滤?

2024-04-27 10:09:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有

class Map(db.Model):
    urlHash= db.ByteStringProperty()

hasher = hashlib.sha256()
hasher.update(staticMapUrl)
urlHash = hasher.digest()
query = db.Query(models.Map)
query = query.filter('urlHash =', urlHash)
results = query.fetch(1) 

这种类型的查询试图将urlHash解码为字符串,并引发异常

UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe in position 0: ordinal not in range(128)


Tags: inmapdbmodelupdatequeryclasshashlib
2条回答

如果您显式地将哈希转换为ByteString,它似乎可以工作:

from google.appengine.api.datastore_types import ByteString

hasher = hashlib.sha256()
hasher.update('http://www.google.com/')
urlHash = hasher.digest()
bs = ByteString(urlHash)

m = Map(urlHash=bs).put()

query = db.Query(Map)
query = query.filter('urlHash =', bs)
results = query.fetch(1)

我发现的一个解决方案是手动编码到base64

urlHash = hasher.digest().encode('base64')

我注意到,除了异常的名称是UnicodeDecodeError,它也发生在编码中。在

相关问题 更多 >