2013-09-05 4 views
2

Je dois renommer une base de données que j'ai créée en utilisant pymongo. Je voudrais utiliser pymongo pour le faire. J'ai trouvé this other stackoverflow question qui est très similaire, et les extraits de code semblent pythonesque, sauf le mot-clé use qui le rend ... Je ne sais pas quoi (Mise à jour: Perl probablement?).Comment renommer une base de données mongodb en utilisant pymongo?

J'ai fait un

client.copy_database('old_name', 'new_name) 

et a constaté que j'avais alors new_name dans `client.database_names(). Mais il semble n'y avoir aucune collection dedans? Que dois-je faire d'autre pour copier en profondeur la base de données en utilisant les commandes pymongo?

+0

copy_database est la bonne façon de le faire. Etes-vous sûr que la commande a réussi et que vous avez copié la bonne base de données? – zero323

Répondre

1
import pymongo 
client = pymongo.MongoClient() 

client.copy_database('foo', 'bar') 

assert set(client['foo'].collection_names()) == set(client['bar'].collection_names()) 

for collection in client['foo'].collection_names(): 
    assert client['foo'][collection].count() == client['bar'][collection].count() 

client.drop_database('foo') 
+0

J'ai essayé ceci. Il a même répondu vrai. Mais quand je fais 'pour e dans client.old_name.twigs.find(): print (e)', je vois un tas de choses. Mais quand je fais 'pour e dans client.new_name.twigs.find(): print (e)', il n'imprime rien. Ce qui me fait penser qu'il n'a pas vraiment copié? –

+0

Je ne peux pas épeler mes propres noms de bases de données. Soupir. Dang. Pardon. (Interpréter, ça _did_ travail) –

3

A partir PyMongo 3.0 partir, vous devez utiliser admin.command depuis copy_databasewas removed in 3.0:

client.admin.command('copydb', 
        fromdb='source_db_name', 
        todb='target_db_name') 
Questions connexes