Python3 操作MongoDB数据库

以上一篇的数据为例子。

In [1]: import pymongo    #引入pymongo模块

In [2]: client = pymongo.MongoClient(host = 'localhost',port = 27017)   #进行连接

In [3]: db = client.maoyan  #指定数据库

In [4]: collection = db.MaoyanItem  #指定集合

这样我们便声明了一个Collection 对象。

一.查询操作

In [6]: result = collection.find_one({'movie':'霸王别姬'})

In [7]: print (result)
{'_id': ObjectId('5bb94c820f99846600edcb13'), 'movie': '霸王别姬', 'actor': '主
演:张国荣,张丰毅,巩俐', 'release': '上映时间:1993-01-01', 'score': '9.6'}

查找评分为9.2分的电影。

In [8]: results = collection.find({'score':'9.2'})

In [9]: for result in results:
   ...:     print (result['movie'])
   ...:
唐伯虎点秋香
魂断蓝桥
喜剧之王
辛德勒的名单
春光乍泄
海上钢琴师
指环王3:王者无敌
天堂电影院
盗梦空间
速度与激情5
甜蜜蜜
英雄本色

查找评分大于9.2分的电影。

In [13]: results = collection.find({'score':{'$gt':'9.2'}})

In [14]: for result in results:
    ...:     print (result['movie'],result['score'])
    ...:
霸王别姬 9.6
肖申克的救赎 9.5
这个杀手不太冷 9.5
教父 9.3
泰坦尼克号 9.5
千与千寻 9.3
美丽人生 9.3
蝙蝠侠:黑暗骑士 9.3
机器人总动员 9.3
忠犬八公的故事 9.3
疯狂原始人 9.5
大话西游之月光宝盒 9.6

                                                                                比较符号。

正则匹配查询。例如查找评分在9.0以上的电影:

In [18]: results = collection.find({'score':{'$regex':'^9.*'}})

In [19]: for result in results:
    ...:     print (result['movie'],result['score'])
    ...:
霸王别姬 9.6
罗马假日 9.1
肖申克的救赎 9.5
这个杀手不太冷 9.5
教父 9.3
泰坦尼克号 9.5
唐伯虎点秋香 9.2
千与千寻 9.3
魂断蓝桥 9.2
乱世佳人 9.1
喜剧之王 9.2
天空之城 9.1
大闹天宫 9.0
辛德勒的名单 9.2
音乐之声 9.0
春光乍泄 9.2
美丽人生 9.3
海上钢琴师 9.2
黑客帝国 9.0
指环王3:王者无敌 9.2
哈利·波特与魔法石 9.1
无间道 9.1
蝙蝠侠:黑暗骑士 9.3
教父2 9.0
指环王2:双塔奇兵 9.1
机器人总动员 9.3
活着 9.0
天堂电影院 9.2
盗梦空间 9.2
哈尔的移动城堡 9.0
忠犬八公的故事 9.3
疯狂原始人 9.5
阿凡达 9.0
十二怒汉 9.1
速度与激情5 9.2
驯龙高手 9.0
神偷奶爸 9.0
三傻大闹宝莱坞 9.1
断背山 9.0
美国往事 9.1
少年派的奇幻漂流 9.1
哈利·波特与死亡圣器(下) 9.0
大话西游之月光宝盒 9.6
倩女幽魂 9.1
无敌破坏王 9.0
触不可及 9.1
甜蜜蜜 9.2
素媛 9.1
小鞋子 9.1
萤火之森 9.0
穿条纹睡衣的男孩 9.0
窃听风暴 9.0
忠犬八公物语 9.0
七武士 9.1
海洋 9.0
爱·回家 9.0
我爱你 9.0
迁徙的鸟 9.1
英雄本色 9.2

                                                       功能符号

计数:

In [20]: collection.find().count()   #所有数据条数
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\ipython:1:
 DeprecationWarning: count is deprecated. Use Collection.count_documents instead
.
Out[20]: 100

In [21]: collection.find({'score':{'$gt':'9.2'}}).count()   #评分大于9.2分的电影数
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\ipython:1:
 DeprecationWarning: count is deprecated. Use Collection.count_documents instead
.
Out[21]: 12

排序:

In [23]: results = collection.find().sort('score',pymongo.ASCENDING)

In [24]: for result in results:
    ...:     print (result['movie'],result['score'])
    ...:
剪刀手爱德华 8.8
搏击俱乐部 8.8
V字仇杀队 8.8
勇敢的心 8.8
黑客帝国3:矩阵革命 8.8
闻香识女人 8.8
飞越疯人院 8.8
致命魔术 8.8
美丽心灵 8.8
夜访吸血鬼 8.8
钢琴家 8.8
本杰明·巴顿奇事 8.8
魔女宅急便 8.8
初恋这件小事 8.8
熔炉 8.8
新龙门客栈 8.8
大话西游之大圣娶亲 8.8
地球上的星星 8.8
恐怖直播 8.8
借东西的小人阿莉埃蒂 8.8
辩护人 8.8
加勒比海盗 8.9
楚门的世界 8.9
射雕英雄传之东成西就 8.9
拯救大兵瑞恩 8.9
东邪西毒 8.9
幽灵公主 8.9
风之谷 8.9
放牛班的春天 8.9
当幸福来敲门 8.9
飞屋环游记 8.9
怦然心动 8.9
鬼子来了 8.9
蝙蝠侠:黑暗骑士崛起 8.9
时空恋旅人 8.9
7号房的礼物 8.9
海豚湾 8.9
上帝之城 8.9
一一 8.9
完美的世界 8.9
黄金三镖客 8.9
大闹天宫 9.0

偏移:


In [25]: results = collection.find().sort('score',pymongo.ASCENDING).skip(80)
#skip(80)表示偏移前面80个数据,即只需要后面20个数据

In [26]: for result in results:
    ...:     print (result['movie'],result['score'])
    ...:
春光乍泄 9.2
海上钢琴师 9.2
指环王3:王者无敌 9.2
天堂电影院 9.2
盗梦空间 9.2
速度与激情5 9.2
甜蜜蜜 9.2
英雄本色 9.2
教父 9.3
千与千寻 9.3
美丽人生 9.3
蝙蝠侠:黑暗骑士 9.3
机器人总动员 9.3
忠犬八公的故事 9.3
肖申克的救赎 9.5
这个杀手不太冷 9.5
泰坦尼克号 9.5
疯狂原始人 9.5
霸王别姬 9.6
大话西游之月光宝盒 9.6

限制:

In [27]: results = collection.find().sort('score',pymongo.ASCENDING).skip(80).l
    ...: imit(5)
#limit(5)表示只取前面5条数据

In [28]: for result in results:
    ...:     print (result['movie'],result['score'])
    ...:
春光乍泄 9.2
海上钢琴师 9.2
指环王3:王者无敌 9.2
天堂电影院 9.2
盗梦空间 9.2

更新:

更新”霸王别姬“的评分为9.9分。

In [29]: condition = {'movie':"霸王别姬"}

In [30]: movie = collection.find_one(condition)

In [31]: movie['score'] = "9.9"

In [32]: result = collection.update(condition,movie)  #调用update方法
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\ipython:1:
 DeprecationWarning: update is deprecated. Use replace_one, update_one or update
_many instead.

In [33]: print (result)  # ok表示成功,nModified表示更新的数据条数
{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

In [34]: movie = collection.find_one(condition)

In [35]: print (movie)      #结果显示评分为9.9,表示已经更新成功了。
{'_id': ObjectId('5bb94c820f99846600edcb13'), 'movie': '霸王别姬', 'actor': '主
演:张国荣,张丰毅,巩俐', 'release': '上映时间:1993-01-01', 'score': '9.9'}

删除:

In [36]: collection.find({'score':'9.5'}).count()   #查找评分为9.5分的电影条数
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\ipython:1:
 DeprecationWarning: count is deprecated. Use Collection.count_documents instead
.
Out[36]: 4

In [37]: collection.delete_many({'score':'9.5'})    #删除评分为9.5分的电影
Out[37]: <pymongo.results.DeleteResult at 0x9264674988>

In [38]: collection.find({'score':'9.5'}).count()   #查找结果为0,说明删除成功
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts0\ipython:1:
 DeprecationWarning: count is deprecated. Use Collection.count_documents instead
.
Out[38]: 0

In [39]: collection.find().count()       #只剩下96条数据
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\ipython:1:
 DeprecationWarning: count is deprecated. Use Collection.count_documents instead
.
Out[39]: 96

 

欢迎关注本人微信公众号,会分享更多的干货:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值