让我们使用Python来学习MongoDB
前征得書
由于这是第一篇文章,所以可能会有许多不足之处,请多多指教。
此外,本文涉及的内容假定读者在一定程度上熟悉Python语法,因此省略了关于语法的解释。
最初,对于Mongo DB进行简短的介绍。
安装
启动服务器并连接
请打开命令提示符,进入安装路径内的.\bin文件夹
C:\MongoDb\Sever\bin>mongod –dbpath C:\MongoDb\data
执行
我们来使用mongoShell和Python两种方法进行操作
我们将使用Python 3.*
MongoShell
MongoShell是一个用于与MongoDB数据库进行交互的命令行工具。
用Python操作MongoDB
安装图书馆
安装 pymongo
官方文档
在这里,我们假设大家都具备一定的 Python 使用能力,例如,我们省略了有关 pip 的解释。
连接到服务器
请先确认MongoDB服务器正常运行。
创建一个Python文件(这里使用PyCharm)。
您也可以使用Python Shell进行相同的操作,同时请使用您熟悉的编辑器。
我们立刻尝试连接
2019-01-21T14:57:19.061+0900 I NETWORK [conn17] received client metadata from 127.0.0.1:58909 conn17: { driver: { name: "PyMongo", version: "3.7.2" }, os: { type: "Windows", name: "Windows 10", architecture: "AMD64", version: "10.0.17134-SP0" }, platform: "CPython 3.7.1.final.0" }
2019-01-21T14:57:19.553+0900 I NETWORK [conn17] end connection 127.0.0.1:58909 (8 connections now open)
当您确认收到这条消息时,连接成功。
使用PyMongo版本为3.7.2进行连接,还可以确认正在使用的Python版本。
通过print(client_1.PORT)可以确认端口号为27017。
另外,可以使用client_1.database_names()来列出现有的数据库名称。
用Python进行CRUD操作
插入数据
因为Qiita的功能很好,所以我会继续在这里编写代码。
from pymongo import MongoClient
from datetime import datetime
class TestMongo(object):
def __init__(self):
self.clint = MongoClient()
self.db = self.clint['test']
def add_one(self):
"""データ挿入"""
post = {
'title': 'ハリネズミ',
'content': 'ハリネズミ可愛い~',
'created_at': datetime.now()
}
return self.db.test.insert_one(post)
def main():
obj = TestMongo()
rest = obj.add_one()
print(rest)
if __name__ == '__main__':
main()
post=[
{'title': 'カワウソ', 'content': 'カワウソ可愛い~', 'created_at': datetime.now()},
{'title': 'ハムスター', 'content': 'ハムスター可愛い~', 'created_at': datetime.now()},
{'title': 'チンチラ', 'content': 'チンチラ可愛い~', 'created_at': datetime.now()}
]
return self.db.test.insert_many(post)
可以用这种感觉来完成
データ読み取る
我在MongoDB.py文件中添加了一个名为get_one的函数。
def get_one(self):
return self.db.test.find_one()
def main():
obj = TestMongo()
rest = obj.get_one()
print(rest)
起動之后可以获取初始插入的数据。如果要获取所有的数据,可以使用self.db.test.find()。这种用法在mongoShell中也相似,对吧。
在使用_id进行数据读取时,会增加一些步骤。首先导入from bson.objectid import ObjectId。
"""新しい関数を定義"""
def get_from_oid(self,oid):
return self.db.test.find_one({'_id':ObjectId(oid)})
def main():
obj = TestMongo()
"""_idを渡す"""
rest = obj.get_from_oid('5c456bf0736d313a7c0afb80')
print(rest)
可以通过这个实现。
数据修正
def update(self):
rest = self.db.test.update_one({"title": "ハムスター"}, {"$set": {"content": "カワウソうるさい"}})
return rest
def main():
obj = TestMongo()
rest = obj.update()
print(rest.matched_count)
def update(self):
"""複数修正"""
rest = self.db.test.update_many({}, {'$set': {"created_at": datetime.now()}})
return rest
def main():
obj = TestMongo()
rest = obj.update()
print(rest.matched_count)
可以看到数字4,所有数据的”created_at”已经被修正。
删除数据
def delete(self):
"""マッチした最初のデータを削除"""
rest = self.db.test.delete_one({"title":"ハムスター"})
return rest
def main():
obj = TestMongo()
rest = obj.delete()
如果需要删除多个,可以将”one”改为”many”:self.db.test.delete_many({“title”:”ハムスター”})。
最后
这是我的第一篇博客,我尽量以简单易懂的方式写作,但我知道还有很多地方需要改进,希望能够得到您的指正。我将继续努力写作,谢谢!
续集
让我们使用Python中的MongoDB对象文档映射(ODM)。