2017-08-07 19 views
0

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つの異なるバージョンを使用した結果であることがわかりました。私はまだ解を解明していない。

+0

クライアント['B'.encode(' utf-8 ')]を試しましたか? – Fabien

+0

幸運にもそこに運がありません – Peter

+0

あなたのDB名は本当にA、Bなどですか、それとも変更しましたか?元の名前は100%ASCIIですか?私はPython3で作成されたDBに対してPython2クライアントのテストを行ったので、 'test'のような単純なDB名でうまく動作します。 – Fabien

答えて

-1

ユーザーが必要な特権をすべて持っていることを確認してください。古典的な特権の問題です。

+0

ユーザー権限を設定する必要はありませんが、これはどういう意味ですか?潜在的にサーバー特権かmongod特権の問題か? – Peter

+0

は直接モンゴに接続し、各DB アンサーコレクションが行うモンゴCLI を使用して参照してみてください: '' 'ショーcollections' を使用あなたはそれがOK参照していますか? –

+0

mongoクライアントを使用できません。私は問題のサーバーにpymongoのバイナリしかインストールしていません。しかし、私はpython3でテストサーバー上で実行することができ、それは問題ないと思うので、大丈夫です。ありがとう、しかし! – Peter

関連する問題