Как запросить фильтрацию по полю ByteString в Google App Engine?

1

У меня

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)

  • 0
    Просьба показать код, который устанавливает urlHash для запроса.
  • 0
    @cope360 cope360 Я добавил код в тело вопроса
Показать ещё 1 комментарий
Теги:
google-app-engine
bytestring

2 ответа

1
Лучший ответ

Похоже, что он будет работать, если вы явно сделаете хэш в 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)
  • 0
    Я не могу проверить это прямо сейчас, но это кажется разумным
0

Одно из решений, которое я нашел, - это закодировать вручную на base64

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

Я отметил, что помимо имени исключения UnicodeDecodeError он также встречается при кодировании.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню