如何从以下字典中删除 u 字符?
{u'name': u'A', u'primary_key': 1}
此数据来自Mongo Database
find()查询
所以它看起来像
{'name': 'A', 'primary_key': 1}
答案 0 :(得分:45)
某些数据库(如Sqlite3)允许您定义converter和adapter函数,因此您可以将文本检索为 str 而不是 unicode 。不幸的是,MongoDB没有为任何常用类型提供此选项,例如str,decimal或datetime:
消除了Mongo选项后,在检索数据后编写Python代码进行转换。您可以编写一个遍历结果的递归函数来转换每个字段。
作为一种快速而又肮脏的选择,这里有一点可能有用的黑客:
>>> import json, ast
>>> r = {u'name': u'A', u'primary_key': 1}
>>> ast.literal_eval(json.dumps(r))
{'name': 'A', 'primary_key': 1}
答案 1 :(得分:18)
您看到的u
字符只是意味着它们是unicode字符串。
如果您不希望它们是unicode,您可以将它们编码为其他内容,例如ASCII。
>>> s = u'hi!'
>>> s
u'hi'
>>> s2 = s.encode('ascii')
>>> s2
'hi'
答案 2 :(得分:5)
如果您只是想将dict转换为json数据字符串,您可以这样做:
>>> from bson.json_util import dumps
>>> data = {u'name': u'A', u'primary_key': 1}
>>> dumps(data)
'{"name": "A", "primary_key": 1}'
答案 3 :(得分:3)
您需要让psycopg2对您的字符串进行编码,而不是尝试将Python语法字符串插入到您的查询中 - 如果某些字符串包含SQL将解释为结束的字符,那么您将面临SQL注入问题的危险串。您应该将参数传递给psycopg2,如下所示:
cursor.execute('INSERT INTO person (name, town) VALUES (%s %s)', (name, town))
因为psycopg2非常非常了解SQL语法,所以当它获取u
和name
字符串和引号时,它将保留town
个字符并完全以与这个SQL语句需要。
答案 4 :(得分:2)
正如sven在他的评论中提到的,u
表示mongodb中表示的类型(实际上是因为json被定义为使用unicode)。
这个事实对您来说应该是完全透明的,事实上您可以在词典中互换使用str
和unicode
值。
>>> 'foo' in {u'foo': 5}
True
>>> {u'foo': 5}['foo']
5
>>>
答案 5 :(得分:0)
你不能简单地从字符串中删除u,因为它象征着字符串是Unicode。
一种解决方案是使用编码功能:
old_strings = {u'name':u'A', u'primary_key':1}
newstrings = {}
for k in old_strings.keys():
newtsrings[k] = old_strings[k].encode('ascii','ignore')
这会忽略非ascii字符。
答案 6 :(得分:0)
类似于已经发布的内容,但是使用json库。
>>> import json
>>> udata = {u'name': u'A', u'primary_key': 1}
>>> json.dumps(udata)
'{"name": "A", "primary_key": 1}'