欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pymongo的简单使用

程序员文章站 2022-05-28 17:05:46
...

MongoDB是典型的非关系型数据库,它的存储形式是BSON(Binary JSON),是类似于JSON格式的二进制存储。这里旨在介绍一些python3下pymongo库的一些简单用法。

1.连接MongoDB

python下连接MongoDB需要用到pymongo库里面的MongoClient。这里有两种形式,一种是传递IP地址和端口即可:

import pymongo

MONGO_CONFIG = {
    'host': '127.0.0.1',
    'port': 27017,
}

if __name__ == '__main__':
    # python的解包
    client = pymongo.MongoClient(**MONGO_CONFIG)
    # 输出所有的数据库的名称
    name_list = client.list_database_names()
    print(name_list)

 比如在我所连的数据库上,输出如下:

pymongo的简单使用

另一种则是传入MongoDB的连接字符串

client = pymongo.MongoClient("mongodb://127.0.0.1:27017/")

能达到和上面同样的效果。

注:localhost为本地回环地址,等同于127.0.0.1,主要用作测试使用。 

如果出现:

pymongo的简单使用

表示mongodb需要认证,此时可以键入:

# 假定mongodb存在名称为tutorial的数据库
db = client.tutorial
# 同db = client['db']
# 账号为123,密码为123
db.authenticate(name='123', password='123')

在指定了数据库后,就可以对数据库中的集合进行操作了。

首先需要指定集合:

collection = db.QuoteItem;
# collection = db['QuoteItem']

 这样就得到了一个Collection对象。(在mongodb中,数据库中保存的是很多集合,也可以理解为关系型数据库中的表。)

2.查询

查询主要有两个函数 find和find_one(),前者返回的是python中的迭代器类型,可以获得多个值,后者则会返回一个值,为字典类型。

2.1 查询单条记录

首先是find_one函数:

condition = {}
collection.find_one(condition)

 我们根据condition所给的条件进行查询,目前并未指定条件,而又使用了find_one()函数,此时获取的是第一条数据,这里输出如下:

{
    '_id': ObjectId('5cef8ccfee198f0282e95ae8'),
     'text': '“The world as we have created it is a process of o...', 
    'author': 'Albert Einstein', 
    'tags': ['change', 'deep-thoughts', 'thinking', 'world']
}

 _id是mongo在插入时自动添加的,我们也可以根据_id的值进行操作:

    from bson.objectid import ObjectId
    result = collection.find_one({'_id': ObjectId('5cef8ccfee198f0282e95ae8')})
    print(result)

 返回结果如上相同。

2.2 查询多条记录

对于多条数据的查询,则可以使用find()函数,比如这里要查询tags中存在'books'的数据:

    results = collection.find({'tags': 'books'})
    print(results)
    for result in results:
        print(result)

 运行结果如下:

<pymongo.cursor.Cursor object at 0x000001E241791518>
{'_id': ObjectId('5cef8ccfee198f0282e95aeb'), 'text': '“The person, be it gentleman or lady, who has not...', 'author': 'Jane Austen', 'tags': ['aliteracy', 'books', 'classic', 'humor']}
{'_id': ObjectId('5cef8cd0ee198f0282e95afa'), 'text': '“Good friends, good books, and a sleepy conscience...', 'author': 'Mark Twain', 'tags': ['books', 'contentment', 'friends', 'friendship', 'life']}
{'_id': ObjectId('5cef8cd1ee198f0282e95b0e'), 'text': '“I have always imagined that Paradise will be a ki...', 'author': 'Jorge Luis Borges', 'tags': ['books', 'library']}
{'_id': ObjectId('5cef8cd1ee198f0282e95b11'), 'text': '“You can never get a cup of tea large enough or a...', 'author': 'C.S. Lewis', 'tags': ['books', 'inspirational', 'reading', 'tea']}
{'_id': ObjectId('5cef8cd2ee198f0282e95b1e'), 'text': '“If you only read the books that everyone else is...', 'author': 'Haruki Murakami', 'tags': ['books', 'thought']}

 从上面可知,find()方法返回的是一个Cursor对象,可以通过list(results)转成列表。

2.3 限定返回的键值对

另外,也可以通过限定返回的键值对,比如这里我不需要_id,只需要author和tags,那么我可以改为:

results = collection.find({'tags': 'books'}, {'_id': 0, 'author': 1, 'tags': 1})

 

3.插入数据

数据的插入主要有两种方法,insert_one()和insert_many(),另外还有一个insert()方法,不过官方并不建议使用。

3.1 插入单条记录

    item = {
        'text': 'I exist because you need me.',
        'author': 'sky',
        'tags': ['love', 'future']
    }
    result = collection.insert_one(item)
    print(result)
    print(result.inserted_id)

运行结果如下:

<pymongo.results.InsertOneResult object at 0x000001E9D6F19D88>
5d2d11b7468fd60fa9cf2a30

返回结果为InsertOneResult对象,通过它的inserted_id属性可以获取_id。

3.2 插入多条记录

    item1 = {
        'text': 'I exist because you need me.',
        'author': 'sky',
        'tags': ['love', 'future']
    }
    item2 = {
        'text': 'We will be together forever',
        'author': 'sky',
        'tags': ['love', 'future']
    }
    result = collection.insert_many([item1, item2])
    print(result)
    print(result.inserted_ids)

运行结果如下:

<pymongo.results.InsertManyResult object at 0x0000019CFFF39B88>
[ObjectId('5d2d128d42638b31f4694743'), ObjectId('5d2d128d42638b31f4694744')]

返回的是InsertManyResult对象,通过它的inserted_ids可以获取数据的_id。

 

相关标签: mongo