一、前言
mongodb属于 nosql(非关系型数据库),是一个基于分布式文件存储的开源数据库系统。
二、操作 mongodb
1、安装 pymongo
python 使用第三方库来连接操作 mongodb,所以我们首先安装此库。
pip3 install pymongodb
2、连接 mongodb
使用 mongoclient 类连接,以下两种参数方式都可以:
1
2
3
4
5
6
|
from pymongo import mongoclient
# 连接方式一
client = mongoclient(host = 'localhost' ,port = 27017 )
# 连接方式二
# client = mongoclient('mongodb://localhost:27017/')
|
3、选择数据库
mongodb 可以创建很多 db,指定我们需要的 db 即可
1
2
3
4
|
# 方式一
db = client.monitor
# 方式二
# db = client['monitor']
|
4、选择集合
db 内包含很多个集合,有点类似 mysql 这类关系型数据库中的表
1
2
3
4
|
# 方式一
collection = db.test
# 方式二
# collection = db['test']
|
5、插入数据
插入一条数据,mongodb 每条记录都有一个唯一标识。返回一个 insertoneresult 对象,若需要获取唯一标识,找到 insertoneresult 对象的属性 inserted_id 即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
from pymongo import mongoclient
class mongodb:
def __init__( self ,host,db,port = 27017 ):
'''
:param host: str mongodb地址
:param db: str 数据库
:param port: int 端口,默认为27017
'''
host = host
db = db
self .port = port
client = mongoclient(host = host,port = port)
self .db = client[db]
def insert_one( self ,table,dic):
'''
:param table: str 数据库中的集合
:param dic: dict 要插入的字典
:return: 返回一个包含objectid类型的对象
'''
collection = self .db[table]
rep = collection.insert_one(dic)
return repif __name__ = = '__main__' :
dic = { '姓名' : '小明' , 'english' : 100 , 'math' : 90 }
db = mongodb(host = 'localhost' ,db = 'test' )
rep = db.insert_one( 'test' ,dic)
print (rep.inserted_id)
|
插入多条数据,使用 insert_many 批量插入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
from pymongo import mongoclient
class mongodb:
def __init__( self ,host,db,port = 27017 ):
'''
:param host: str mongodb地址
:param db: str 数据库
:param port: int 端口,默认为27017
'''
host = host
db = db
self .port = port
client = mongoclient(host = host,port = port)
self .db = client[db]
def insert_one( self ,table,dic):
'''
:param table: str 数据库中的集合
:param dic: dict 要插入的字典
:return: 返回包含一个objectid类型的对象
'''
collection = self .db[table]
rep = collection.insert_one(dic)
return rep
def insert_many( self ,table,lists):
'''
:param table: str 数据库中的集合
:param dic: dict 要插入的列表,列表中的元素为字典
:return: 返回包含多个objectid类型的列表对象
'''
collection = self .db[table]
rep = collection.insert_many(lists)
return rep
if __name__ = = '__main__' :
lists = [{ '姓名' : '小明' , 'english' : 100 , 'math' : 90 },
{ '姓名' : '小华' , 'english' : 90 , 'math' : 100 }]
db = mongodb(host = 'localhost' ,db = 'test' )
rep = db.insert_many( 'test' ,lists)
for i in rep.inserted_ids:
print (i)
|
6、查询
1)常规查询
- find_one :查询单条记录,返回一个字典。
- find:查询多条记录 ,返回一个游标对象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
from pymongo import mongoclient
class mongodb:
def __init__( self ,host,db,port = 27017 ):
'''
:param host: str mongodb地址
:param db: str 数据库
:param port: int 端口,默认为27017
'''
host = host
db = db
self .port = port
client = mongoclient(host = host,port = port)
self .db = client[db]
def find_one( self ,table,dic):
'''
:param table: str 数据库中的集合
:param dic: dict 查询条件
:return: dict 返回单条记录的字典
'''
collection = self .db[table]
rep = collection.find_one(dic)
return rep
def find( self ,table,dic):
'''
:param table: str 数据库中的集合
:param dic: dict 查询条件
:return: list 返回查询到记录的列表
'''
collection = self .db[table]
rep = list (collection.find(dic))
return rep
if __name__ = = '__main__' :
# 查询 english 成绩为 100 的所有记录
dic = { 'english' : 100 }
db = mongodb(host = 'localhost' ,db = 'test' )
rep = db.insert_many( 'test' ,dic)
print (rep)
|
2)范围查询
有时候我们需要范围比较查询,比如要查询 english 成绩为 80~90 ,可以使用比较符:dic = {'english':{'$in':[80,90]}}
- $lt :小于
- $lte:小于等于
- $gt:大于
- $gte:大于等于
- $ne:不等于
- $in:在范围内
- $nin:不在范围内
3)计数
直接调用 count() 方法,返回一个 int 类型的数字
1
2
3
|
# 计数查询只需要在普通查询后加上 count() 即可
count = collection.find().count()
# count = collection.find({'english':{'$gt':90}}).count()
|
4)排序
排序时,直接调用sort()方法,并在其中传入排序的字段及升降序标志,返回一个游标对象
1
2
|
# 正序 ascending,倒序 descending。list()将游标对象转成列表
data = list (collection.find(dic).sort( '姓名' ,pymongo.descending))
|
7、更新数据
首选查到需要更新的数据,然后将该数据更新,返回一个 updataresult 对象, raw_result 属性中包含 update 生效的个数。
- update_one:更新查询到的第一条数据
- update_many:更新多条数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
from pymongo import mongoclient
class mongodb:
def __init__( self ,host,db,port = 27017 ):
'''
:param host: str mongodb地址
:param db: str 数据库
:param port: int 端口,默认为27017
'''
host = host
db = db
self .port = port
client = mongoclient(host = host,port = port)
self .db = client[db]
def update_one( self ,table,condition,dic):
'''
:param table: str 数据库中的集合
:param condition: dict 查询条件
:param dic: dict 更新的数据
:return: 返回updateresult对象
'''
collection = self .db[table]
# $set 表示只更新dic字典内存在的字段
rep = collection.update_one(condition,{ '$set' :dic})
# 会把之前的数据全部用dic字典替换,如果原本存在其他字段,则会被删除
# rep = collection.update_one(condition, dic)
return rep
def update_many( self ,table,condition,dic):
'''
:param table: str 数据库中的集合
:param condition: dict 查询条件
:param dic: dict 更新的数据
:return:返回updateresult对象
'''
collection = self .db[table]
# $set 表示只更新dic字典内存在的字段
rep = collection.update_many(condition,{ '$set' :dic})
# 会把之前的数据全部用dic字典替换,如果原本存在其他字段,则会被删除
# rep = collection.update_many(condition, dic)
return rep
if __name__ = = '__main__' :
condition = { 'english' : 80 }
dic = { 'english' : 60 }
db = mongodb(host = 'mongodb-monitor.monitor.svc.test.local' ,db = 'test' )
rep = db.update_one( 'test' ,condition,dic)
print (rep.raw_result)
# 输出 {'n': 1, 'nmodified': 1, 'ok': 1.0, 'updatedexisting': true}
|
8、删除
删除和 update 类似,删除数据后,返回一个 deleteresult 对象, raw_result 属性中包含 delete 的个数
- delete_one:删除查询到的第一条数据
- delete_many:批量删除符合查询条件的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
from pymongo import mongoclient
class mongodb:
def __init__( self ,host,db,port = 27017 ):
'''
:param host: str mongodb地址
:param db: str 数据库
:param port: int 端口,默认为27017
'''
host = host
db = db
self .port = port
client = mongoclient(host = host,port = port)
self .db = client[db]
def delete_one( self ,table,dic):
'''
:param table: str 数据库中的集合
:param dic: dict 查询条件
:return: 返回deleteresult对象
'''
collection = self .db[table]
rep = collection.delete_one(dic)
return rep
def delete_many( self ,table,dic):
'''
:param table: str 数据库中的集合
:param dic: dict 查询条件
:return: 返回deleteresult对象
'''
collection = self .db[table]
rep = collection.delete_many(dic)
return rep
if __name__ = = '__main__' :
dic = { 'english' : 60 }
db = mongodb(host = 'localhost' ,db = 'test' )
rep = db.delete_many( 'test' ,dic)
print (rep.raw_result)
# 输出 {'n': 21, 'ok': 1.0}
|
以上就是如何用python 操作mongodb数据库的详细内容,更多关于python 操作mongodb数据库的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/shenh/p/14416111.html