Python使用pymongo连接MongoDB数据库并进行操作 您所在的位置:网站首页 内存条怎么看标压还是低压 Python使用pymongo连接MongoDB数据库并进行操作

Python使用pymongo连接MongoDB数据库并进行操作

2023-12-15 23:33| 来源: 网络整理| 查看: 265

一、基本概述

目前电脑上已经下载了MongoDB数据库、navicat for mongodb作为mongoDB的可视化工具,形如navicat for mysql作为mysql的可视化工具。 使用Pycharm编写python代码连接mongodb,创建数据库,创建集合(集合是指形如mysql中的sql数据表)等操作。 使用pymongo进行数据库连接,因此需要在pycharm中下载。

二、创建数据库

创建数据库需要使用 MongoClient 对象,并且指定连接的 URL 地址和要创建的数据库名。

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") #新建数据库 mydb = myclient["runoobdbs"]

注意:

此时navicat还无法看见新建的数据库,这是因为在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。

三、判断数据库是否存在

代码如下:

#判断数据库是否存在 dblist = myclient.list_database_names() #list_database_names()获取数据库名 # dblist = myclient.database_names() if "runoobdbs" in dblist: print("数据库已存在!") 四、创建集合

代码如下:

#创建集合 mycol = mydb["sites"] 五、判断集合是否存在

代码如下:

#判断集合是否存在 collist = mydb. list_collection_names() #获取集合名 # collist = mydb.collection_names() if "sites" in collist: # 判断 sites 集合是否存在 print("集合已存在!")

此时仍旧无法显示数据库和集合名。

六、插入文档

1.插入单个文档 文档就是指的里面的数据。

#插入文档 mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"} x = mycol.insert_one(mydict) print(x)

若是没有数据库、集合在,此代码上面要有创建数据库、创建集合的代码。 代码运行前MongoDB显示数据库名称: 1 代码运行后MongoDB显示数据库名称: 2 运行后navicat fo rmongodb显示如下: 3 Pycharm运行第一次结果: 4 第二次运行结果: 5 此时全部代码有:

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") #新建数据库 mydb = myclient["runoobdbs"] #判断数据库是否存在 dblist = myclient.list_database_names() #list_database_names()获取数据库名 # dblist = myclient.database_names() if "runoobdbs" in dblist: print("数据库已存在!") #创建集合 mycol = mydb["sites"] #判断集合是否存在 collist = mydb. list_collection_names() #获取集合名 # collist = mydb.collection_names() if "sites" in collist: # 判断 sites 集合是否存在 print("集合已存在!") #插入文档 mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"} x = mycol.insert_one(mydict) print(x)

2.返回 _id 字段 insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。 返回 _id 字段只需要在以上代码最后下再加一句print(x.inserted_id)即可。 结果是: 1 而此时由于运行了三次,出现了三行内容一样,id不一样的文档。 1 3.插入多个文档 集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。 代码如下:

#插入多个文档 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)

Pycharm运行结果: 1 navicat显示如下: 2 也可以使用MongoDB查看。 1

补充: use+空格+数据库,作用是数据库不在时新建,在时切换到此数据库下。 db.creatCollection('集合名'),创建集合。 db.集合名.find()方法显示此集合下所有数据。

4.插入指定 _id 的多个文档 我们也可以自己指定 id,插入,以下实例我们在 site2 集合中插入数据,_id 为我们指定的:

mycol2 = mydb["site2"] mylist2 = [ {"_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 = mycol2.insert_many(mylist2) # 输出插入的所有文档对应的 _id 值 print(x.inserted_ids)

Pycharm运行结果: 1 navicat显示如下: 1 此时全部代码如下:

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") #新建数据库 mydb = myclient["runoobdbs"] #创建集合 mycol = mydb["sites"] ''' #判断数据库是否存在 dblist = myclient.list_database_names() #list_database_names()获取数据库名 # dblist = myclient.database_names() if "runoobdbs" in dblist: print("数据库已存在!") #判断集合是否存在 collist = mydb. list_collection_names() #获取集合名 # collist = mydb.collection_names() if "sites" in collist: # 判断 sites 集合是否存在 print("集合已存在!") ''' #插入文档 #mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"} #x = mycol.insert_one(mydict) #print(x) #print(x.inserted_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) #插入多条不同id的文档 mycol2 = mydb["site2"] mylist2 = [ {"_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 = mycol2.insert_many(mylist2) # 输出插入的所有文档对应的 _id 值 print(x.inserted_ids) 七、查询文档

本节上个内容有显示MongoDB查询文档的操作,在Pycharm里如何实现查询呢? 1.查询一条数据

#查询一条数据 x = mycol.find_one() print(x)

Pycharm运行结果: 1 2.查询集合中所有数据 find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。

#查询所有数据 for x in mycol.find(): print(x)

Pycharm运行结果: 1 3.查询指定字段的数据 我们可以使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。 除了 _id,你不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然。 不能出现类似这样的代码for x in mycol.find({},{ "name": 1, "alexa": 0 }):。

#返回指定字段 for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }): #意思是只返回name和alexa,不要id print(x) for x in mycol.find({},{ "alexa": 0 }): #除了alexa字段,其他都返回 print(x)

运行结果是: 1 2 4.根据指定条件查询 我们可以在 find() 中设置参数来过滤数据。

#根据指定条件查询 myquery = {"name": "RUNOOB"} mydoc = mycol.find(myquery) for x in mydoc: print(x)

运行结果: 1 5.高级查询 查询的条件语句中,我们还可以使用修饰符。 以下实例用于读取 name 字段中第一个字母 ASCII 值大于 “H” 的数据,大于的修饰符条件为 {“$gt”: “H”} :

#高级查询 myquery = { "name": { "$gt": "H" }} mydoc = mycol.find(myquery) for x in mydoc: print(x)

运行结果: 1

MongoDB中条件操作符有: (>) 大于 - $gt (=) 大于等于 - $gte ("$regex": "^R"}} #查询name中以R开头的数据 mydoc = mycol.find(myquery) for x in mydoc: print(x)

运行结果: 1 7.返回指定条数记录 如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。 以下实例返回 3 条文档记录:

#返回指定条数 myresult = mycol.find().limit(3) #查询前三条数据 # 输出结果 for x in myresult: print(x)

1

八、修改文档

在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。 如果查找到的匹配数据多于一条,则只会修改第一条。 更新前的数据如下: 1 代码如下:

#修改一条数据 myquery = {"alexa": "10000"} #将alexa的10000的数据值改为12345 newvalues = {"$set": {"alexa": "12345"}} mycol.update_one(myquery, newvalues) # 输出修改后的 "sites" 集合 for x in mycol.find(): print(x)

更新后: 1 update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()。 以下实例将查找所有以 F 开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123:

#修改多条数据 myquery = {"name": {"$regex": "^F"}} #寻找以F开头的name,将其alexa值改为123 newvalues = {"$set": {"alexa": "123"}} x = mycol.update_many(myquery, newvalues) print(x.modified_count, "文档已修改")

更新后: 1

九、排序

sort() 方法可以指定升序或降序排序。 sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

#排序 将alexa以升序排序 mydoc = mycol.find().sort("alexa") for x in mydoc: print(x)

结果如下: 1 降序排序:

#alexa降序 mydoc = mycol.find().sort("alexa", -1) for x in mydoc: print(x)

结果如下: 1

十、删除文档

1.删除一个文档 使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。 删除前的数据库如图: 1

#删除一条数据 myquery = { "name": "Taobao" } mycol.delete_one(myquery) # 删除后输出 for x in mycol.find(): print(x)

删除后: 2 2.删除多个文档 我们可以使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。 删除所有 name 字段中以 F 开头的文档:

#删除多条数据 myquery = {"name": {"$regex": "^F"}} x = mycol.delete_many(myquery) print(x.deleted_count, "个文档已删除")

删除后: 1 3.删除集合中的所有文档 delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

#删除集合中所有文档 x = mycol.delete_many({}) #mycol = mydb["sites"]连的是sites,所以会删除sites里的所有文档 print(x.deleted_count, "个文档已删除")

删除后: 1 4.删除集合 我们可以使用 drop() 方法来删除一个集合。

#删除集合 mycol.drop()

1 总代码有:

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") #新建数据库 mydb = myclient["runoobdbs"] #创建集合 mycol = mydb["sites"] ''' #判断数据库是否存在 dblist = myclient.list_database_names() #list_database_names()获取数据库名 # dblist = myclient.database_names() if "runoobdbs" in dblist: print("数据库已存在!") #判断集合是否存在 collist = mydb. list_collection_names() #获取集合名 # collist = mydb.collection_names() if "sites" in collist: # 判断 sites 集合是否存在 print("集合已存在!") ''' #插入文档 #mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"} #x = mycol.insert_one(mydict) #print(x) #print(x.inserted_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) #插入多条不同id的文档 #mycol2 = mydb["site2"] #mylist2 = [ # {"_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 = mycol2.insert_many(mylist2) # 输出插入的所有文档对应的 _id 值 #print(x.inserted_ids) #查询一条数据 #x = mycol.find_one() #print(x) #查询所有数据 #for x in mycol.find(): # print(x) #返回指定字段 #for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }): #意思是只返回name和alexa,不要id # print(x) #for x in mycol.find({},{ "alexa": 0 }): #除了alexa字段,其他都返回 # print(x) #根据指定条件查询 #myquery = {"name": "RUNOOB"} #mydoc = mycol.find(myquery) #for x in mydoc: # print(x) #高级查询 #myquery = { "name": { "$gt": "H" }} #mydoc = mycol.find(myquery) #for x in mydoc: # print(x) #使用正则表达式查询 #myquery = {"name": {"$regex": "^R"}} #mydoc = mycol.find(myquery) #for x in mydoc: # print(x) #返回指定条数 #myresult = mycol.find().limit(3) # 输出结果 #for x in myresult: # print(x) #修改一条数据 #myquery = {"alexa": "10000"} #将alexa的10000的数据值改为12345 #newvalues = {"$set": {"alexa": "12345"}} #mycol.update_one(myquery, newvalues) # 输出修改后的 "sites" 集合 #for x in mycol.find(): # print(x) #修改多条数据 #myquery = {"name": {"$regex": "^F"}} #寻找以F开头的name,将其alexa值改为123 #newvalues = {"$set": {"alexa": "123"}} #x = mycol.update_many(myquery, newvalues) #print(x.modified_count, "文档已修改") #排序 将alexa以升序排序 #mydoc = mycol.find().sort("alexa") #for x in mydoc: # print(x) #alexa降序 #mydoc = mycol.find().sort("alexa", -1) #for x in mydoc: # print(x) #删除一条数据 #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, "个文档已删除") #删除集合中所有文档 #x = mycol.delete_many({}) #print(x.deleted_count, "个文档已删除") #删除集合 mycol.drop()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有