Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python搜索Postgres中的json编码字符串_Python_Json_Postgresql_Encoding - Fatal编程技术网

用Python搜索Postgres中的json编码字符串

用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获取

我有一个类似这样的db查询,我正在用Python在Postgres数据库上执行:

"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(我不确定)
我将从第二种可能性开始研究这两点。

来自帮助(json.dumps):

从帮助(json.loads)中:

所以试试类似的方法

>>> 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