Reputation: 22252
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?
Upvotes: 3
Views: 2977
Reputation: 1
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")
Upvotes: 0
Reputation: 402
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')
Upvotes: 5
Reputation: 330083
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')
Upvotes: 2