Python+MongoDB
标签(空格分隔): 未分类
1. 链接数据库
import pymongo
from pymongo import MongoClient
#1.连结本地MongoDB服务器
connect = MongoClient("localhost")
'''
2.关联某个数据库 链接名.数据库名
(1)关联的数据库存在,则直接关联该数据库
(2)关联的数据库不存在,则创建该数据库
'''
db = connect.school
#3.关联数据表(集合),关联数据表的逻辑和关联数据库的逻辑相同的
grade_1_3 = db.grade_1_3
#4.开始表的相关操作
result= grade_1_3.find({},{"_id":0})
# print(result)
for document in result:
print(document)
2. 封装链接数据库函数
# import pymongo
from pymongo import MongoClient
class Connect:
def __init__(self,dbName,collection):
self.con = MongoClient("localhost") #获取链接
self.db = self.con[dbName] #关联数据库
self.collection = self.db[collection] #关联数据表
def get(self):
return self.collection
#如果直接运行本py文件,则会run如下代码,如果是其他py文件调用本文件,则此文件不会运行
if __name__ == "__main__":
#创建一个Connect的实例
con = Connect("school","grade_1_3")
#从con实例中获取表实体
students = con.get()
#查询score表中所有的数据,去掉_id字段
result = students.find({},{"_id":0})
for doc in result:
print(doc)
3. 添加一行数据insert_one()
import pymongo
from pymongo import MongoClient
#1.连结本地MongoDB服务器
connect = MongoClient("localhost")
'''
2.关联某个数据库 链接名.数据库名
(1)关联的数据库存在,则直接关联该数据库
(2)关联的数据库不存在,则创建该数据库
'''
db = connect.school
#3.关联数据表(集合),关联数据表的逻辑和关联数据库的逻辑相同的
grade_1_3 = db.grade_1_3
#4.向grade_1_3集合添加一条数据
info = {
"name":"zhangsan",
"age":26,"sex":"boy",
"contact":{
"email":"abcd@gmail.com",
"phone":18788888888}
}
grade_1_3.insert_one(info)
result= grade_1_3.find({},{"_id":0})
for document in result:
print(document)
print("执行完成")
4. 添加多行数据insert_many()
......
db = connect.school
#3.关联数据表(集合),关联数据表的逻辑和关联数据库的逻辑相同的
grade_1_3 = db.grade_1_3
person1 = {
"name":"妲己",
"sex":"女",
"age":1000,
"hobby":["唱歌","跳舞"]
}
person2 = {
"name": "安其拉",
"sex": "女",
"age": 18,
"hobby": ["玩火", "看书","蹲草丛"]
}
#4.向grade_1_3集合添加多条数据
grade_1_3.insert_many([person1,person2])
#grade_1_3.insert([person1,person2]) 方法2
result= grade_1_3.find({},{"_id":0})
......
5. 更新数据update_one()和update_many()
from Connect01 import Connect
#Connect里传数据库名和数据表名
grade_1_3 = Connect("school","grade_1_3").get()
#查找name为李四的所有数据,只更新第一个李四的sex为girl.
students = grade_1_3.update_one({"name":"李四"},{"$set":{"sex":"girl"}})
#$inc , 如果记录中没有这个字段,会增加此字段,如果有,就把所有age值加2
students = grade_1_3.update_many({},#条件,这里为空,相当于无条件,即更新所有
{"$inc":{"age":2}})#把所有键值为age的值都相应加2
#$min 的意思是和当前值比较,取最小值来进行更新
students1 = grade_1_3.update_many({"name":{"$in":["张三","李四"]}}, {"$min":{"age":6}})#如果张三和李四的age都比6小就不用更新,如果都比6大就都更新为6.
print("执行完成")
6. 查找数据find()和find_one_and_update()
from Connect01 import Connect
#Connect里传数据库名和数据表名
grade_1_3 = Connect("school","grade_1_3").get()
1)students = grade_1_3.find({"name":{"$in":["张三","王五"]}},{"_id":0})
2)result = grade_1_3.find(
{"name":{"$in":["张三","王五"]},
"age":{"$lt":17}},
{"_id":0})
3)result = grade_1_3.find({"$or":[{"name":{"$in":["张三","王五"]}},{"age":{"$lt":15}}]},{"_id":0})
4)#查找手机号是1832145672的员工
result = employee.find({"concat.phone":"1832145672"},{"_id":0})
5)# 查询所有记录,将查询到的结果增加一字段:locked:1,同时将age字段里的值增加2,返回的结果中只包含age,name,同时对返回结果按age降序排列,最后返回该记录修改之前的状态
result = grade_1_3.find_one_and_update({},
{
"$set":{"locked":1}, #添加这个字段
"$inc":{"age":2}
},
projection={"age":True,"name":True}, #只返回age和name字段
sort=[('age',pymongo.DESCENDING)], #将结果按照降序排列
return_document=pymongo.ReturnDocument.BEFORE #返回修改之前的数据
)
for doc in students:
print(doc)