python 使用mongodb的方法总结

Mongodb 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。

Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接。

1.创建数据库

创建数据库需要使用 MongoClient 对象,并且指定连接的 URL 地址和要创建的数据库名。

具体的函数为:pymongo.MongoClient()

python 使用mongodb的方法总结_第1张图片

import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017")
mydb=myclient["python_test"]  #或者使用 myclient.python_test
mycol=mydb['sites']  #或者使用mydb.sites
doc={"name":"luan","age":26,"address":"shanghai"}
mycol.insert_one(doc)
dblist=myclient.list_database_names()
collist=mydb.list_collection_names()
x=mycol.find_one()
print(dblist,'\n',collist)
print(x)

运行结果为:

['admin', 'config', 'local', 'python_test', 'test'] 
 ['sites']
{'_id': ObjectId('5b501d3d80b39a1c2cd9bec4'), 'name': 'luan', 'age': 26, 'address': 'shanghai'}

对应的查看一下mongodb的数据库,可以发现已经创建成功:

python 使用mongodb的方法总结_第2张图片

2.插入数据

插入文档可以插入一行,也可以出入多行  分别为 collection_name.insert_one,collection_name.insert_many(mylist)里面是一个字典的列表

使用.inserted_ids可以查看插入的文档的——id值。

x = mycol.insert_many(mylist)     # 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)

也可以同时在字典中包含“_id”,来指定保存的id

import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017")
mydb=myclient.python_test2
mycol=mydb.sites
doc={"name":"luan","age":26,"address":"shanghai"}
mylist=[
    { "_id":1,"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
  { "_id":2,"name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
  { "_id":3,"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" }
    ]
mycol.insert_one(doc)
y=mycol.insert_many(mylist)
dblist=myclient.list_database_names()
collist=mydb.list_collection_names()
#mycol.delete_many({})
x=mycol.find()
print(dblist,'\n',collist)
for each in x:
    print(each)

输出为:

3.查询数据

查询第一条数据可以使用collection_name.find_one,查询所有数据可以使用collection_name.find(),

import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017")
mydb=myclient.python_test2
mycol=mydb.sites
#mycol.delete_many({})
x=mycol.find_one()
y=mycol.find()
print(x)
print(y)

输出结果:

{'_id': ObjectId('5b504b8a80b39a2208c5700e'), 'name': 'luan', 'age': 26, 'address': 'shanghai'}
   #为一个cursor对象,想要看到所有内容,迭代查看即可

指定条件查找,可以使用find({query})

import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017")
mydb=myclient.python_test2
mycol=mydb.sites
y=mycol.find({"name":"QQ"})    #在字典中指定查询的 条件 当大括号中没有内容时,等同于find()
print(y)
for each in y:
    print(each)

输出为:


{'_id': 2, 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
在字典中指定查询的 条件 当大括号中没有内容时,等同于find()

如果要查询指定字段的数据,需要将返回的字段的值设为1,并且除了id之外,不能够在同一个对象中同时指定0 和1 。

 {"name":0,"url":1}的写法会报错

import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017")
mydb=myclient.python_test2
mycol=mydb.sites
y=mycol.find({},{"_id":0,"name":1})
for each in y:
    print(each)

输入为:

{'name': 'luan'}
{'name': 'Taobao'}
{'name': 'QQ'}
{'name': 'Facebook'}
    可以看到只显示了“name”字段

如果设置 了一个字段为0,那么其他的将全为1   如:

import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017")
mydb=myclient.python_test2
mycol=mydb.sites
y=mycol.find({},{"name":0,"url":0})
for each in y:
    print(each)

输出为:

{'_id': ObjectId('5b504b8a80b39a2208c5700e'), 'age': 26, 'address': 'shanghai'}
{'_id': 1, 'alexa': '100'}
{'_id': 2, 'alexa': '101'}
{'_id': 3, 'alexa': '10'}

高级查询

查询的条件语句中,我们还可以使用修饰符。可以使用mongo中的修饰符:$gt  $lt #gte 等等。

myquery={"alexa":{"$gt":102}}
for x in mycol.find(myquery):
    print(x)

输出结果为:

{'_id': ObjectId('5b509f9139dcdf11acc0a3ff'), 'name': 'RUNOOB', 'alexa': 10000, 'url': 'https://www.runoob.com'}
{'_id': ObjectId('5b509f9139dcdf11acc0a402'), 'name': '知乎', 'alexa': 103, 'url': 'https://www.zhihu.com'
}

使用正则表达式查询

我们还可以使用正则表达式作为修饰符。

正则表达式修饰符只用于搜索字符串的字段。 正则表达式修饰符条件为 {"$regex": "条件"} :

myquery={"name":{"$regex":"^T"}}
for x in mycol.find(myquery):
    print(x)

输出为:

{'_id': ObjectId('5b509f9139dcdf11acc0a400'), 'name': 'Taobao', 'alexa': 100, 'url': 'https://www.taobao.com'}

返回指定条数记录

如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。同mongo语法一致

还可以跳过指定的条数:  可以使用skip()函数。

3.修改文档

我们可以在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。

如果查找到的匹配数据多余一条,则只会修改第一条。  方法有“set 设置 ” 和“ inc 加  ”方法

myquery={"alexa":10000}
newvalues={"$set":{"alexa":10001}}
mycol.update_one(myquery,newvalues)
y= mycol.find()
for x in y:
    print(x)

输出(部分):

{'_id': ObjectId('5b509f9139dcdf11acc0a3ff'), 'name': 'RUNOOB', 'alexa': 10001, 'url': 'https://www.runoob.com'}

myquery={"alexa":10001}
newvalues={"$inc":{"alexa":10002}}
mycol.update(myquery,newvalues)
y= mycol.find()
for x in y:
    print(x)

输出:(部分)

{'_id': ObjectId('5b509f9139dcdf11acc0a3ff'), 'name': 'RUNOOB', 'alexa': 20003, 'url': 'https://www.runoob.com'}

使用update_many 可以修改多条文档:方法类似。

myquery={"alexa":{"$gt":100}}
newvalues={"$set":{"alexa":111}}
mycol.update_many(myquery,newvalues)
y= mycol.find()
for x in y:
    print(x)

输出结果:

{'_id': ObjectId('5b509f9139dcdf11acc0a3ff'), 'name': 'RUNOOB', 'alexa': 111, 'url': 'https://www.runoob.com'}
{'_id': ObjectId('5b509f9139dcdf11acc0a400'), 'name': 'Taobao', 'alexa': 100, 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b509f9139dcdf11acc0a401'), 'name': 'QQ', 'alexa': 111, 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b509f9139dcdf11acc0a402'), 'name': '知乎', 'alexa': 111, 'url': 'https://www.zhihu.com'}

 

你可能感兴趣的:(数据库,爬虫学习笔记)