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.
Avez-vous essayé client ['B'.encode (' utf-8 ')]? – Fabien
Ouais, pas de chance là non plus – Peter
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