【问题标题】:How to query filtering by a ByteString field in Google App Engine?如何通过 Google App Engine 中的 ByteString 字段查询过滤?
【发布时间】:2011-07-11 09:11:19
【问题描述】:

我有

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)

【问题讨论】:

  • 请显示为查询设置 urlHash 的代码。
  • @cope360 我将代码添加到问题正文中
  • 能否请您包含异常的完整堆栈跟踪?

标签: python google-app-engine


【解决方案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)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2010-10-06
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多