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())
posted @ 2021-07-03 16:13  索匣  阅读(873)  评论(0编辑  收藏  举报