pymongo 相关用法总结

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

参考连接

docs.mongodb.com/manual/python

建立惟一索引

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…mongodb

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

在终端实现 rename:数据库

db["old_name"].renameCollection("new_name")
复制代码

固然,通常来讲只要在原生终端可行,就可使用 python 封装一层调用。api

查阅 pymongo 的文档,能够发现实际上是有这个方法的, 相关连接: api.mongodb.com/python/curr…测试

因此咱们能够用如下来实现:spa

db.oldname.rename('newname')
复制代码

报错

pymongo.errors.BulkWriteError: batch op errors occurred

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

在 insert_many 的时候出现的批量插入的错误, 查找到的文章中说多是建立了惟一索引,而后索引冲突形成的。 若是出现了这个错误就删除集合再插入:

pymongo.errors.DuplicateKeyError

参考: 示例截图:3d

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

相关文章
相关标签/搜索