How to rename a mongodb database using pymongo?

Question:

I need to rename a database I created using pymongo. I’d like to use pymongo to do it. I found this other stackoverflow question that is very similar, and the code snippets look pythonesque, except the use keyword which makes it… I don’t know what (Update: Perl probably?).

I did a

client.copy_database('old_name', 'new_name)

And found that I then had new_name in `client.database_names()’. But it appears to have no collections in it? What else do I need to do, to deeply copy the database, using pymongo commands?

Asked By: Travis Griggs

||

Answers:

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')
Answered By: zero323

From PyMongo 3.0 onwards, you have to use admin.command since copy_database was removed in 3.0:

client.admin.command('copydb',
                     fromdb='source_db_name',
                     todb='target_db_name')
Answered By: user2804197

I tried all above ways but none worked for me, The script below has worked for me and thought it would work for you as well.(Note: con is my database connection )

def rename_database(old_name,new_name):
        #copying collections and documents from old to new database
        for i in con[old_name].list_collection_names():
            con[new_name][i]
            for j in con[old_name][i].find():
                a=con[new_name][i].insert_one(j)
        #dropping old database
        con.drop_database(old_name)

#testing purpose
rename_database("test","newDbName")
Answered By: Salomon Bizimana
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.