python连接mongodb数据库操作
可先了解Mongodb的基础概念
创建数据库
使用pymongo模块连接Mongodb数据库,连接的模块采用MongoClient();参数是mongodb的url地址,是以如下形式'mongodb:xxx'
import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
# mysql pymysql.connect('localhost',user='',passwd='',db='')
dblist = myclient.list_database_names() # 返回所有数据库的名称以列表的形式
print(dblist) # ['admin', 'config', 'lianjia', 'local', 'scrapy']
# dblist = myclient.database_names()
if "runoobdb" in dblist:
print("数据库已存在!")
# 创建数据库,直接在连接mongodb的对象采用列表赋值
mydb = myclient["runoobdb"]
创建一个集合
# MongoDB 中的集合类似 SQL 的表。
# 集合也是采用列表赋值,不过对象是数据库
mycol = mydb["sites"]
判断集合是否存在
创建集合但没有插入数据打印出来集合还是为空
collist = mydb. list_collection_names()
print('打印出数据库中的所有集合',collist) # 打印出数据库中的所有集合 []
# collist = mydb.collection_names()
if "sites" in collist: # 判断 sites 集合是否存在
print("集合已存在!")
插入文档
插入单个文档
集合中插入文档使用 insert_one() 方法,该方法的第一参数是字典 name => value 对
insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。
如果我们在插入文档时没有指定 _id,MongoDB 会为每个文档添加一个唯一的 id。
mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }
x = mycol.insert_one(mydict)
print(x) # <pymongo.results.InsertOneResult object at 0x0000020660712D08>
print(x.inserted_id) # 60e0142fd900a4961e1c83de
插入多个文档
insert_many() 方法返回 InsertManyResult 对象,该对象包含 inserted_ids 属性,该属性保存着所有插入文档的 id 值
mylist = [
{ "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
{ "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
{ "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
{ "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
{ "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]
x = mycol.insert_many(mylist)
输出插入的所有文档对应的 _id 值
print(x.inserted_ids) # [ObjectId('61bdc3157536781d26633d23'), ObjectId('61bdc3157536781d26633d24'), ObjectId('61bdc3157536781d26633d25'), ObjectId('61bdc3157536781d26633d26'), ObjectId('61bdc3157536781d26633d27')]
插入指定 _id 的多个文档
这个在插入文档之后,报错报错raise BulkWriteError(full_result)
# mylist = [
# { "_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"},
# { "_id": 2, "name": "Google", "address": "Google 搜索"},
# { "_id": 3, "name": "Facebook", "address": "脸书"},
# { "_id": 4, "name": "Taobao", "address": "淘宝"},
# { "_id": 5, "name": "Zhihu", "address": "知乎"}
# ]
# x = mycol.insert_many(mylist) # 报错raise BulkWriteError(full_result)
# # 输出插入的所有文档对应的 _id 值
# print(x.inserted_ids)
查询数据
MongoDB 中使用了 find 和 find_one 方法来查询集合中的数据,它类似于 SQL 中的 SELECT 语句。
查询一条数据
x = mycol.find_one()
print(x)
查询集合中所有数据
#for x in mycol.find():
# print(x)
查询指定字段的数据
除了 _id 你不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然
# for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):
# print(x)
# print('*'*80)
# #以下实例除了 alexa 字段外,其他都返回:
# for x in mycol.find({},{ "alexa": 0 }):
# print(x)
根据条件查询
# myquery = { "name": "RUNOOB" }
# mydoc = mycol.find(myquery)
# for x in mydoc:
# print(x)
修改数据
修改单条数据
update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()。
print('*'*40,' 修改数据操作','*'*40)
# 修改数据
# 使用update_one() 方法修改文档中的记录
myquery = { "alexa": "10000" }
newvalues = { "$set": { "alexa": "12345" } }
mycol.update_one(myquery, newvalues)
# 输出修改后的 "sites" 集合
for x in mycol.find():
print(x)
修改多条数据
# 以下实例将查找所有以 F 开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123:
myquery = { "name": { "$regex": "^F" } }
newvalues = { "$set": { "alexa": "123" } }
x = mycol.update_many(myquery, newvalues) # 返回修改的文档有几个
print(x.modified_count, "文档已修改")1文档已修改
数据排序
# sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
mydoc = mycol.find().sort("alexa")
for x in mydoc:
print(x)
删除数据
使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
myquery = { "name": "Taobao" }
mycol.delete_one(myquery)
# 删除后输出
for x in mycol.find():
print(x)
删除多个文档
myquery = { "name": {"$regex": "^F"} }
x = mycol.delete_many(myquery)
print(x.deleted_count, "个文档已删除")
删除集合中的所有文档
delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:
x = mycol.delete_many({}) # 1 个文档已删除
print(x.deleted_count, "个文档已删除") # 4 个文档已删除
删除集合
使用 drop() 方法来删除一个集合。
mycol.drop()
print('查看现在的集合',mydb. list_collection_names())
努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。