【问题标题】:Handling DB queries and filtering Django and Unicode处理数据库查询和过滤 Django 和 Unicode
【发布时间】:2013-09-21 11:09:39
【问题描述】:

我正在使用以下查询进行过滤

list = AboutMe.objects.order_by('MyLinkedInLastName').filter(Q(MyGender__contains=Gender1))

但是当我使用 unicode 字符串时它似乎不起作用。让我解释。在表中,数据字段存储为:例如[u'_M', u'_F']。例如,选择另一条记录的行和字段可能是 [u'_M']。当我将它剥离到文本时 - 即删除 [] 并显示我得到 u'_M' 并在过滤器中使用它作为 Gender1 。现在这似乎不起作用。但是如果我将“_M”硬编码到过滤器中就可以了。我不明白发生了什么 - 这里有某种隐式转换吗?

我从Gender1 = GenderField.split()[0].strip('[],')得到 Gender1

这似乎可行

list = AboutMe.objects.order_by('MyLinkedInLastName').filter(Q(MyGender__contains='_M'))

顺便说一句,出于此处的目的,我已经简化了查询。这似乎是编码的问题。使这项工作良好而稳健的最佳方法是什么?

【问题讨论】:

  • 你能发布第一个查询的 sql 转储吗?

标签: python sql django object unicode


【解决方案1】:

您将数据存储为一个字符串,该字符串是从 Python 表示的列表创建的。这是一个非常糟糕的主意。

直接的问题是,即使您删除了 [ 字符并在逗号上拆分,您剩下的就是 字符串 "u'_M'" 和 "u'_F'" - 也就是说, u 字符以及开始和结束引号被存储为字符串的一部分。所以这不是你想象的“Unicode 字符串”,而只是一个包含前导 u 后跟引号的字符串。

您也许可以将文本存储为 JSON,而不是这样做 - 在 Django 中有各种 JSONFields 实现,它们会为您处理数据的序列化和反序列化。

【讨论】:

  • 谢谢。在我清理数据之后,是否有一种便宜/简单的方法可以在保存之前解析列表。我热衷于让 Django 尽可能地保持原样,因为我不知道最终的平台会是什么(即可能是 Google App Engine)。
  • 我确实认为我的方法是规范的做法。
猜你喜欢
  • 2015-09-22
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2018-03-04
相关资源
最近更新 更多