查看环境是否装有MongoDB pip list
同时需要下载对应的库
pip install pymongo
操作步骤
第一步连上数据库
#导入包
import pymongo
#建立链接 client 为自定义变量
client = pymongo.MongoClient()
#连远程数据库
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
#指定数据库
#db = client[数据库名] 例如之前已经创建的python64
my_db = client["python64"]
#指定集合
#collection=db[集合名] 例如之前已经创建好的集合student
my_collect = my_db["student"]
数据库操作集合
以下python3已经不推荐使用,也可以继续使用
#查找文档
find()
#添加文档
insert()
#修改文档
update()
#删除文档
remove()
推荐方法如下
新增文档
添加一条文档:insert _one
添加多条文档:insert _many
#新增一条数据
my_collect.insert_one({"_id":6,"name":"hanxin","age":24})
#新增多条数据
my_collect.insert_many([
{"_id":7,"name":"joker","age":22},
{"_id":8,"name":"xiaqi","age":26},
{"_id":9,"name":"ajiu","age":19},
{"_id":10,"name":"yuxuan","age":15},
])
查找文档
查找一条文档: find_one()
查找所有 find(),这是一个对象,可以利用for循环,遍历所有数据
#查询一条数据 如有有查询条件,在括号内加入条件即可,只会查找第一条符合条件的数据
result = my_collect.find_one()
print(result)
#my_collect.find()查询所有数据,返回的是一个地址,是一个可迭代对象
results = my_collect.find()
#循环遍历拿到所有的数据,如果有查询条件,也可以在括号内加入查询条件
for res in results:
print(res)
#查找一条数据
results = my_collect.find({'name':'hansha'})
#查找find返回的是一个地址,需要遍历取值
my_collect.find_one({'name':'hansha'})
修改文档’’
修改一条文档:update_one()
修改多条文档:update_many()
#修改一条数据,将name = ajiu的年龄修改为18,只会修改一条
my_collect.update_one({"name":"ajiu"},{"$set":{"age":18}})
#修改多条数据
my_query = { "name": { "$regex": "^F" } }
new_values = { "$set": { "age": "18" } }
#将查找所有以 F 开头的 name 字段,并将查找到的所有数据中的age修改问为18
my_collect.update_many(my_query,new_values)
删除文档
修改一条文档: delete_one()
删除多条文档:delete_many()
#删除name=ajiu的文档(数据),删除会有返回值,返回值是一个地址
res = my_collect.delete_one({"name":"ajiu"})
#删除多条数据
my_query = { "name": { "$regex": "^F" } }
#删除所有 name 字段中以 F 开头的文档
res = my_collect.delete_many(my_query)
print(res.deleted_count,"个文档已删除")
#删除集合中的所有文档
#delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:
res = my_collect.delete_many({})
print(res.deleted_count,"个文档已删除")
删除集合
我们可以使用 drop() 方法来删除一个集合。
#会删除student集合,删除成功返回true 删除失败返回false
my_collect.drop()
数据排序
sort() 方法可以指定升序或降序排序。
sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
#对字段age以升序方式排序
results = my_collect.find().sort("age")
for res in results:
print(res)
#对字段age以降序方式排序
results = my_collect.find().sort("age",-1)
for res in results:
print(res)
个人对mongo的简单封装
import pymongo
from databases import my_logger
class My_mongodb:
def __init__(self,db_name,collect_name):
try:
self.log = my_logger.My_logger()
self.my_client = pymongo.MongoClient()
self.my_db = self.my_client[db_name]
self.my_collent = self.my_db[collect_name]
except Exception as e:
self.log.use_Debug("数据库连接失败,错误内容:{}".format(e))
# print("数据库连接失败!")
# print(e)
else:
print("数据库连接成功!")
#文档操作
#新增数据
def insert_data(self,argc,many = False):
#插入多条数据
if many:
try:
# print(argc)
self.my_collent.insert_many(argc)
except Exception as e:
self.log.use_Debug("新增数据错误,错误内容:{}".format(e))
# print("新增数据错误,错误内容%s",e)
else:
print("多条数据插入成功!")
#插入单条数据
else:
try:
# print(argc)
self.my_collent.insert_one(argc)
except Exception as e:
self.log.use_Debug("新增数据错误,错误内容:{}".format(e))
else:
print("数据插入成功!")
def find_data(self,argc = None,all = False):
try:
# 查找单条数据
result = None
if not all:
# print(argc)
result = self.my_collent.find_one(argc)
#查找多条数据
else:
# print(argc)
result = self.my_collent.find(argc)
except Exception as e:
self.log.use_Debug("查询数据错误,错误内容:{}".format(e))
# print("查询数据错误,错误内容%s",e)
else:
if result != None:
print("数据已找到!")
if not all:
print(result)
else:
for res in result:
print(res)
else:
print("数据未找到!")
#修改数据
def update_data(self,condition,new_data,many = False):
try:
if not many:
#修改单条
self.my_collent.update_one(condition,new_data)
else:
#修改多条
self.my_collent.update_many(condition,new_data)
except Exception as e:
self.log.use_Debug("修改数据错误,错误内容:{}".format(e))
# print("数据修改错误,错误内容%s",e)
else:
print("数据修改成功!")
self.find_data(new_data.get('$set'))
#删除数据
def delete_data(self,condition,many=False):
try:
if not many:
#删除单条
result = self.my_collent.delete_one(condition)
else:
#删除多条
result = self.my_collent.delete_many(condition)
except Exception as e:
self.log.use_Debug("删除数据错误,错误内容:{}".format(e))
# print("数据删除错误,错误内容%s",e)
else:
print("数据删除成功!")
print("{}个数据被删除!".format(result.deleted_count))
#删除所有数据
def delete_allData(self):
self.my_collent.delete_many({})
if __name__ == '__main__':
# print(1)
mydb = My_mongodb('python64','student')
data = '222'
mydb.insert_data(data,many = True)
mydb.delete_data('897')