2017-08-07 2 views
0

J'ai un serveur MongoDB rempli de plusieurs bases de données. Ces bases de données contiennent toutes des données utilisées dans l'agrégation de certains calculs que je fais sur certains jeux de données. Ces bases de données sont toutes créées en Python 3. La plupart des données sont récupérées par le côté client de mon outil, qui est aussi dans python3 et fonctionne très bien, sans problème d'interrogation. Cependant, je rencontre des problèmes lorsque j'essaie d'accéder à une base de données spécifique à partir d'un serveur distinct que seulement a python2.7 installé (je n'ai aucun contrôle sur cela). Lorsque j'imprime les noms de base de données pour voir à quoi ils ressemblent, je reçois quelque chose comme ceci:Impossible d'interroger les noms de base de données pymongo unicode

>>> print(client.database_names()) 
[u'A', u'B', u'C', u'D', u'E'] 

Note: Ils ne regardent que cette façon sur le serveur avec python2.7 installé. Disons que je cherche le contenu de la base de données 'B', dont je sais qu'il est rempli depuis que je vérifie depuis mon serveur en utilisant python3. Il ne semble pas vouloir tirer la bonne base de données par son nom, peu importe ce que j'essaie. Voilà ce que j'ai essayé:

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

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

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

tentative 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 
## [] 

Je ne suis pas d'autre façon de surmonter ce problème. Est-ce quelque chose avec l'écriture dans la base de données? Toute aide serait appréciée Merci.

EDIT:

Je l'ai fait un peu plus creuser et trouvé que le problème est sans aucun doute en raison de l'utilisation de deux versions différentes de Python. Je n'ai pas encore trouvé de solution.

+0

Avez-vous essayé client ['B'.encode (' utf-8 ')]? – Fabien

+0

Ouais, pas de chance là non plus – Peter

+0

Vos noms de DB sont-ils vraiment A, B, etc. ou avez-vous changé? Est-ce que le nom d'origine est 100% ASCII? Parce que j'ai fait un test d'un client python2 à un DB créé en Python3, cela fonctionne très bien avec un simple nom de DB comme 'test' – Fabien

Répondre

-1

Assurez-vous que votre utilisateur dispose de tous les privilèges nécessaires, c'est un problème de privilège classique.

+0

Je n'avais pas besoin de définir de privilèges d'utilisateur, qu'entendez-vous par là? Serait-ce potentiellement un problème de privilège de serveur ou un problème de privilège mongod? – Peter

+0

se connecter à l'mongo directement et essayer de voir les collections unser chaque db utilisant le cli mongo ne: '' utiliser 'show collections' le voyez-vous ok? –

+0

Impossible d'utiliser le client mongo. Je n'ai que les binaires pour pymongo installés sur le serveur en question. Cependant, je peux l'exécuter avec python3 sur le serveur de test et ça se voit bien, donc je ne pense pas que ce soit le problème. Merci quand même! – Peter