zoukankan      html  css  js  c++  java
  • 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())
    
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    测试方案写作要点
    [loadrunner]通过检查点判定事务是否成功
    【面试】如何进行自我介绍
    【nginx网站性能优化篇(1)】gzip压缩与expire浏览器缓存
    【nginx运维基础(6)】Nginx的Rewrite语法详解
    【PHPsocket编程专题(实战篇①)】php-socket通信演示
    【Linux高频命令专题(22)】gzip
    【nginx运维基础(5)】Nginx的location攻略
    【Linux高频命令专题(21)】df
    【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/14966626.html
Copyright © 2011-2022 走看看