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 放在循環裏面:

相關文章
相關標籤/搜索