У меня
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 не может декодировать байт 0xfe в позиции 0: порядковый номер не в диапазоне (128)
Похоже, что он будет работать, если вы явно сделаете хэш в 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
он также встречается при кодировании.