用Python搜索Postgres中的json编码字符串
我有一个类似这样的db查询,我正在用Python在Postgres数据库上执行:用Python搜索Postgres中的json编码字符串,python,json,postgresql,encoding,Python,Json,Postgresql,Encoding,我有一个类似这样的db查询,我正在用Python在Postgres数据库上执行: "Select * from my_tbl where big_string like '%Almodóvar%'" 但是,在我搜索的Almodóvar列中,它表示为“Almod\u00f3var”,因此查询不返回任何结果 我该怎么做才能使这两个字符串匹配起来?我更愿意在Python端使用Almodóvar,而不是数据库中的列,但我很灵活 评论提示的其他信息: 数据库使用UTF-8。我查询的字段是从外部API获取
"Select * from my_tbl where big_string like '%Almodóvar%'"
但是,在我搜索的Almodóvar
列中,它表示为“Almod\u00f3var
”,因此查询不返回任何结果
我该怎么做才能使这两个字符串匹配起来?我更愿意在Python端使用Almodóvar
,而不是数据库中的列,但我很灵活
评论提示的其他信息:
数据库使用UTF-8。我查询的字段是从外部API获取的。数据以json的形式进行RESTful检索,然后在json.dump之后插入到数据库的文本字段中
由于数据包含大量外来名称和字符,因此处理这些数据一直是一系列与编码相关的难题。如果有一个银弹可以让Python很好地处理这些数据,我将非常感激知道这是什么
更新2:
看来是json编码造成了我的困惑
print json.dumps("Almodóvar")
屈服
"Almod\u00f3var"
这就是我在查看原始数据时看到的。但是,当我使用json.dumps来构造此文件时:
"Select * from my_tbl where big_string like '%Almod\u00f3var%'"
查询仍然没有结果。我被难住了。将postgres表的字符编码设置为utf-8,那么它将与python顺利集成。不需要来回转换。您的问题看起来像是对python代码和DB使用了两种不同的编码
编辑:Almod\u00f3var在我看来就像windows代码页1252。将postgres表的字符编码设置为utf-8,然后它将与python顺利集成。不需要来回转换。您的问题看起来像是对python代码和DB使用了两种不同的编码
编辑:Almod\u00f3var在我看来就像是windows代码页1252。您的问题似乎来自查询之前的一个步骤。从您从Web服务检索数据时开始。它可以是:
- 在与Web服务通信期间,编码未设置为UTF-8
- 来自tmdb.org端的编码不是UTF-8(我不确定)
我将从第二种可能性开始研究这两点。您的问题似乎来自您的查询之前的一个步骤。从您从Web服务检索数据时开始。它可以是:
- 在与Web服务通信期间,编码未设置为UTF-8
- 来自tmdb.org端的编码不是UTF-8(我不确定)
>>> js = json.dumps("Almodóvar", ensure_ascii=False)
>>> res = json.loads(js, encoding="utf-8")
>>> print res
Almodóvar
从帮助(json.dumps)中:
从帮助(json.loads)中:
所以试试类似的方法
>>> js = json.dumps("Almodóvar", ensure_ascii=False)
>>> res = json.loads(js, encoding="utf-8")
>>> print res
Almodóvar
出于好奇,例如,如果他已经插入值并表示为
Almod\u00f3var
,那么更改DB的编码会不会将这些先前插入值的表示形式更改为Almodóvar
。还是他必须执行一些处理?我已经确认数据库的编码已经是UTF-8。将使用有关数据的更多信息更新我的问题。出于好奇,如果他已经插入值并表示为Almod\u00f3var
,例如,更改DB的编码是否会将这些先前插入值的表示形式更改为Almodóvar
。还是他必须执行一些处理?我已经确认数据库的编码已经是UTF-8。将用有关数据的更多信息更新我的问题。这很有帮助。看起来最好的办法是使用sure_ascii=False更新数据库中的转储,然后查看如何进行。谢谢你的详细解释。这可能会解决我的很多问题。第一个错误可能是加载json时没有编码参数。我将针对我当前的问题进行测试,如果有效的话,我会接受这个答案。我创建了一个新的列,每个帖子都加载和转储了数据,并且能够执行我问题中提到的搜索。谢谢这很有帮助。看起来最好的办法是使用sure_ascii=False更新数据库中的转储,然后查看如何进行。谢谢你的详细解释。这可能会解决我的很多问题。第一个错误可能是加载json时没有编码参数。我将针对我当前的问题进行测试,如果有效的话,我会接受这个答案。我创建了一个新的列,每个帖子都加载和转储了数据,并且能够执行我问题中提到的搜索。谢谢是的,我想我的错误是从服务加载数据时没有设置编码参数。这是一系列的编码问题。是的,我认为我的错误是从服务加载数据时没有设置编码参数。从那以后,一直存在着一系列的编码问题。
>>> js = json.dumps("Almodóvar", ensure_ascii=False)
>>> res = json.loads(js, encoding="utf-8")
>>> print res
Almodóvar