pymongo 相关用法总结

711 阅读1分钟

每次用到了来加,没有固定顺序。

参考链接

docs.mongodb.com/manual/

创建唯一索引

import datetime
import pprint

from pymongo import MongoClient

# 使用 pymongo 连接到数据库中的目标集合
col = MongoClient("127.0.0.1:27017").get_database("mytest").get_collection("codetable")

# 在数据库中插入一条数据方便测试
col.insert_one({"SecuCode": "SH000001", "EndDate": datetime.datetime(2019, 9, 4), "num": 1234})

# 以 SecuCode 创建唯一索引 其中的 1 和 -1 表示 索引的正序和倒叙
# 1 是从小到大 -1 是从大到小
col.create_index([("SecuCode", 1)], unique=True)

# 查看索引
print(pprint.pformat(col.index_information()))

# 删除索引
col.drop_index([("SecuCode", 1)])


# 创建联合唯一索引
col.create_index([("SecuCode", 1), ("EndDate", 1)], unique=True)

删除集合

from pymongo import MongoClient
# 使用 pymongo 连接到数据库中的目标集合
col = MongoClient("127.0.0.1:27018").get_database("mytest").get_collection("codetable")
# 删除集合
col.drop()

重命名集合

参考: stackoverflow.com/questions/4…

说的是可以在 mongo shell 的原生终端去 rename, 但是在 pymongo 中没有这个功能。

在终端实现 rename:

db["old_name"].renameCollection("new_name")

当然,一般来说只要在原生终端可行,就可以使用 python 封装一层调用。

查阅 pymongo 的文档,可以发现其实是有这个方法的, 相关链接: api.mongodb.com/python/curr…

所以我们可以用以下来实现:

db.oldname.rename('newname')

报错

pymongo.errors.BulkWriteError: batch op errors occurred

参考: blog.csdn.net/perfectnihi… 示例截图:

在 insert_many 的时候出现的批量插入的错误, 查找到的文章中说可能是创建了唯一索引,然后索引冲突造成的。 如果出现了这个错误就删除集合再插入:

pymongo.errors.DuplicateKeyError

参考: 示例截图:

看到参考文章里面的意思是,出现这种错误的原因是传递给 mongo 的一直是同一个 dict 对象,所以 mongo 保存的时候会出现 "_id" 重复的异常。 需要将 dict 放在循环里面: