MongoDBサーバーに複数のデータベースが設定されています。これらのデータベースはすべて、一部のデータセットで行う計算の集計に使用されるデータの一部を保持します。これらのデータベースはすべてPython 3で作成されています。データの大半はpython3にもある私のツールのクライアント側で取得され、問題なくクエリを実行できます。しかし、より別のサーバーから特定のデータベースにアクセスしようとすると問題に遭遇します。にはpython2.7がインストールされています(私はそれ以上の制御はありません)。私は、彼らがどのように見えるかを確認するためにデータベース名を印刷するとき、私はこのような何かを得る:pymongo unicodeデータベース名を照会できません
>>> print(client.database_names())
[u'A', u'B', u'C', u'D', u'E']
注:彼らはのみインストールpython2.7を持つサーバー上でこのように見えます。
私は私のサーバーからpython3を使ってチェックするので、私が知っているデータベース 'B'の内容を探しています。私が何を試しても、正しいデータベースを名前で引き出したいとは思われません。
>>>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
## []
を、私はこの問題を克服する方法が他にないよ:これは私が試したものです。それはデータベースに書いて何か?どんな助けでも感謝します、ありがとう。
EDIT:
私は、もう少し掘りを行なったし、問題は間違いなくPythonの2つの異なるバージョンを使用した結果であることがわかりました。私はまだ解を解明していない。
クライアント['B'.encode(' utf-8 ')]を試しましたか? – Fabien
幸運にもそこに運がありません – Peter
あなたのDB名は本当にA、Bなどですか、それとも変更しましたか?元の名前は100%ASCIIですか?私はPython3で作成されたDBに対してPython2クライアントのテストを行ったので、 'test'のような単純なDB名でうまく動作します。 – Fabien