Pymongo迁移MongoDB数据库的数据

使用pymongo的用法请参考:Python连接MongoDB,使用pymongo进行增删改查

迁移的逻辑也很简单:

  1. 从源主机读取数据库
  2. 得到数据库的全部集合
  3. 循环每个集合,根据_id迁移
  4. 然后每一个_id都会保存一次
  5. 每次更换集合的时候都会重新申请一个pymongo的链接,这里是防止数据连接时间过长导致的链接失效报错

示例代码

from pymongo import MongoClient
from loguru import logger


def get_coll_to(host, database, collection):
    """目标数据库"""
    mongo_conn = MongoClient(host=host, port=27017)
    mongo_db = mongo_conn.get_database(database)
    coll = mongo_db.get_collection(collection)
    return coll


def _save_or_update_mongodb(coll, dict_value):
    """根据检查_id,如果存在就覆盖,如果不存在就新增"""
    record = coll.find_one({"_id": dict_value['_id']})
    if not record:
        coll.insert_one(dict_value)
    else:
        coll.update_one(record, {
            "$set": dict_value,
        })


def main(host_from, host_to):
    database_name_list = ["database1", "database2", "database3"]  # 数据库列表
    for database_name in database_name_list:
        logger.debug("开始迁移数据库:{}", database_name)
        mongo_conn = MongoClient(host=host_from, port=27017)
        mongo_database = mongo_conn.get_database(database_name)
        for _collection_name in mongo_database.list_collection_names():
            logger.debug("迁移集合:{}", _collection_name)
            to_cell = get_coll_to(host_to, database_name, _collection_name)
            coll = mongo_database.get_collection(_collection_name)
            for _record in coll.find():
                logger.debug("数据库:{} 集合:{} 迁移中 id:{}", database_name, _collection_name, _record['_id'])
                _save_or_update_mongodb(to_cell, _record)


if __name__ == '__main__':
    main("127.0.0.1", "192.168.1.123")  # 从本机的地址到远程的地址
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将 SQLite3 数据库数据迁移MongoDB 中,您需要执行以下步骤: 1. 安装必要的库:pymongo 和 django-mongodb-engine。 ``` pip install pymongo django-mongodb-engine ``` 2. 配置 MongoDB: 在 settings.py 文件中,将 DATABASES 设置更改为以下内容: ``` DATABASES = { 'default': { 'ENGINE': 'django_mongodb_engine', 'NAME': 'your-db-name', 'USER': '', 'PASSWORD': '', 'HOST': 'localhost', 'PORT': 27017, } } ``` 在上面的示例中,您需要将 'your-db-name' 更改为您的数据库名称。 3. 创建 MongoDB 集合: 在 Django 中,每个模型都对应一个。在 MongoDB 中,每个集合都对应一个模型。因此,您需要创建一个集合来存储每个模型的数据。 在 MongoDB 中,集合是按需创建的,因此您只需要在使用模型之前使用 pymongo 创建集合。 ``` import pymongo client = pymongo.MongoClient() db = client['your-db-name'] db.create_collection('your-collection-name') ``` 在上面的示例中,您需要将 'your-db-name' 更改为您的数据库名称,将 'your-collection-name' 更改为您要创建的集合名称。 4. 迁移数据: 一旦您的集合已准备好,您可以使用以下命令将 SQLite3 数据库中的数据迁移MongoDB 中: ``` python manage.py migrate --run-syncdb python manage.py dumpdata | python manage.py loaddata --format=json --database=mongodb ``` 第一条命令将创建 MongoDB 中的结构。第二个命令将导出 SQLite3 数据库中的数据,并将其导入MongoDB 中。 在上面的命令中,您需要将 'mongodb' 更改为您在 settings.py 文件中配置的数据库名称。 请注意,这种方式可能不适用于所有情况,因为 SQLite3 和 MongoDB数据模型不同。您需要确保没有数据丢失或数据不一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值