如何通过Google App Engine中的ByteString字段查询过滤?

时间:2011-03-08 19:47:55

标签: python google-app-engine bytestring

我有

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'编解码器无法解码位置0的字节0xfe:序号不在范围内(128)

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我找到的一个解决方案是手动编码为base64

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

我注意到除了UnicodeDecodeError的例外名称之外,它也会出现在编码上。