Python Can';t查询pymongo unicode数据库名称

Python Can';t查询pymongo unicode数据库名称,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有一个MongoDB服务器,里面有几个数据库。这些数据库都包含我在某些数据集上进行的某些计算的聚合中使用的数据片段。这些数据库都是在Python3中创建的。大多数数据都是由我的工具的客户端检索的,它也是在python3中,工作正常,查询时没有问题。然而,当我试图从一个单独的服务器访问一个特定的数据库时,我遇到了一些问题,而不仅仅是安装了python2.7(我无法控制)。当我打印数据库名称以查看它们的外观时,会得到如下结果: >>> print(client.database_

我有一个MongoDB服务器,里面有几个数据库。这些数据库都包含我在某些数据集上进行的某些计算的聚合中使用的数据片段。这些数据库都是在Python3中创建的。大多数数据都是由我的工具的客户端检索的,它也是在python3中,工作正常,查询时没有问题。然而,当我试图从一个单独的服务器访问一个特定的数据库时,我遇到了一些问题,而不仅仅是安装了python2.7(我无法控制)。当我打印数据库名称以查看它们的外观时,会得到如下结果:

>>> print(client.database_names())
[u'A', u'B', u'C', u'D', u'E']
注意:它们仅在安装了python2.7的服务器上看起来是这样的

假设我正在寻找数据库“B”的内容,我知道它是在我使用python3从服务器进行检查时填充的。不管我怎么做,它似乎都不想按名称提取正确的数据库。这就是我尝试过的:

>>>db = client[unicode('B')]
>>>print (db.collection_names())
[]

>>>db = client[u'B']
>>>print (db.collection_names())
[]

>>>db = client['B']
>>>print (db.collection_names())
[]
尝试2

# Python 2.7 pymongo test script
import pymongo
ip_address = "some ip address"

client = pymongo.MongoClient(ip_address)
db_names = client.database_names()

for i in range(len(db_names)):
    if (unicode('B') == db_names[i]):
        print ('foo')
        db = client[db_names[i]]
        break

print (db.collection_names())
##
## OUTPUT

## foo
## []
我不知道如何克服这个问题。是因为写入数据库吗?任何帮助都将不胜感激,谢谢

编辑


我做了更多的挖掘,发现问题肯定是由于使用了两个不同版本的Python造成的。我还没有找到解决方案。

确保您的用户拥有所有需要的权限,这是一个典型的权限问题

你试过客户端['B'。编码('utf-8')]?是的,运气不好。你的数据库名真的是A、B等吗?或者你改变了吗?原始名称是否为100%ASCII?因为我对python2客户机进行了测试,测试了Python3中创建的一个DB,它可以很好地使用一个简单的DB名称,比如
test
这些名称由100%的ascii字符组成,但它们不是像“a”、“B”和“C”这样的单个字符串。我这样做只是为了表明我的意思。您是如何创建python3数据库的?这可能就是我的问题所在。是的,
collection\u names()
在Python2客户端和
c[c.database\u names()[0]]上工作。collection\u names()
在我这边工作。请注意,它还将unicode编码的字符串作为结果提供给我。我不需要设置任何用户权限,这是什么意思?这可能是服务器权限问题还是mongod权限问题?直接连接到mongo,并尝试使用mongo cli在每个数据库中查看集合。请执行以下操作:
use
show collections
您是否看到它正常?无法使用mongo客户端。我只在讨论中的服务器上安装了pymongo的二进制文件。然而,我可以在测试服务器上用python3运行它,它显示的很好,所以我认为这不是问题所在。不过,谢谢!