让我们使用Python来学习MongoDB

前征得書

由于这是第一篇文章,所以可能会有许多不足之处,请多多指教。
此外,本文涉及的内容假定读者在一定程度上熟悉Python语法,因此省略了关于语法的解释。

最初,对于Mongo DB进行简短的介绍。

mongo

安装

alt

启动服务器并连接

请打开命令提示符,进入安装路径内的.\bin文件夹

C:\MongoDb\Sever\bin>mongod –dbpath C:\MongoDb\data

image.png

执行

我们来使用mongoShell和Python两种方法进行操作
我们将使用Python 3.*

MongoShell

MongoShell是一个用于与MongoDB数据库进行交互的命令行工具。

image.png
image.png

用Python操作MongoDB

安装图书馆

安装 pymongo
官方文档
在这里,我们假设大家都具备一定的 Python 使用能力,例如,我们省略了有关 pip 的解释。

连接到服务器

请先确认MongoDB服务器正常运行。
创建一个Python文件(这里使用PyCharm)。
您也可以使用Python Shell进行相同的操作,同时请使用您熟悉的编辑器。

我们立刻尝试连接
image.png
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()
キャプチャ23242.PNG
 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)
キャプチャ.PNG

    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)。

广告
将在 10 秒后关闭
bannerAds