0

例如,一个对象之一包含this_sub_string

>> repr(this_sub_string)
u'1 \u03bcM rosiglitazone / 0.1% DMSO for 1 hour'`

在其description领域。但是当我objects.all.filter(Q(description__contains=this_sub_string))像这样搜索对象时,没有返回结果。

当我在搜索之前消除字符串\u03bcM时,我可以获得正确的结果

>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')
[<Samples: 40171_GSM1199141_CBP CHIP-SEQ, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: 40172_GSM1199139_RNAPII CHIP-SEQ, 3T3-L1 DAY7 1H ROSI REP2_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40176_GSM\
1199143_INPUT, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40180_GSM1199133_MED1 CHIP-SEQ, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40185_GSM119\
9137_RNAPII CHIP-SEQ, 3T3-L1 DAY7 1H ROSI REP1_Mus musculus>]

>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')[0].description
u'{"source name": "3T3-L1 adipocytes (Day 7)", "treatment": "1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour", "cell type": "3T3-L1 adipocytes", "chip antibody": "anti-CBP (sc-369; Santa Cruz)"}'

有人对此有想法吗?谢谢..

4

2 回答 2

1

这部分让我认为您存储的不是字符串本身,而是dict包含此字符串或json转储的表示。

>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')[0].description
u'{"source name": "3T3-L1 adipocytes (Day 7)", "treatment": "1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour", "cell type": "3T3-L1 adipocytes", "chip antibody": "anti-CBP (sc-369; Santa Cruz)"}'

在这种情况下,Unicode 字符将作为 utf-8 字符出现在数据库中,\u03bcM而不是 utf-8 字符

要使用此字符串进行搜索,应该以相同的方式处理它(json转储或repr

于 2013-10-29T08:41:51.667 回答
0

我找到了一个黑客来解决这个问题

from _json import encode_basestring_ascii as c_encode_basestring_ascii

>>> c_encode_basestring_ascii(a)
'"1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour"'

然后查询可以返回正确的结果..

于 2013-10-29T08:42:23.103 回答