ITPub博客

首页 > 数据库 > > Python实战mongodb第1篇: Python和Mongodb

Python实战mongodb第1篇: Python和Mongodb

作者:浪花小雨滴 时间:2020-05-12 11:49:38 0 删除 编辑

Mongodb 介绍


Mongodb是为互联网应用而生的数据库. 什么意思呢? 如果你的项目读的次数远大于写, 那么就适合用mongodb. 例如前台资讯型网站. 大家基本上都是浏览文章, 很少发贴. 这时候就很适合用mongodb.


以mongodb为代表的nosql数据库, 以牺牲数据库事务性为代价, 提高访问速度. 它并不适合订单类应用. 我们以电商项目为例子. 电商项目的主要业务在于展示商品, 用户可以下订单. 对于数据的展示, 可以把商品数据存到mongodb里. 对于用户下单业务, 还是用mysql/oracle处理比较合适.


那么系统同时存在两个数据库, 是不是就更复杂了呢? 不是. mongodb是schema-free的数据库.
意思就是你完全可以不考虑表结构, 随便写你的业务. 对于开发业务系统而言, 可以做到快速适应需求, 快速上线, 随便折腾.
当然代价就是系统的冗余代码可能增多, 整体风格混乱. 这也没办法, 请找一个强力的架构师来控制好吧.


因为这篇是入门介绍帖子, 所以不详细介绍在生产环境怎么装. 我的目的只是让你安装, 跑起来, 能够跑我的python代码就行了. 程序的下载路径在这里(记得选3.4版本): mongodb安装包下载地址


下载之后就是一路next, 没什么好说的. 之前说过用mongdb很自由. 装完之后, 并不需要像oracle/mysql 那样做一堆事情. 你直接就可以干活.


Pymongo / ming


Python访问mongodb的最好第三方包是pymongo. 用pymongo本身已经很简单了.
但你知道python总有更简单的东西.... ming就是这么一个封装了pymongo的orm框架, 它让你能用面向对象的思维来存储数据.
如果你很熟悉java的hibernate, 那么你可以把它理解成hibernate.


安装ming很简单, 用pip就行了:

pip install ming

如果你注意看控制台, 你会看到它自动把pymongo装上了.


来段程序吧, 说了这么多话, 我写程序的心已经饥渴难耐了:


14-15行 引入了一堆mongodb的类库

18-19行 是创建数据连接的写法, 最终目的是得到一个session类. (g_ 为前缀是我的习惯, 以这样的开头来命名全局变量)

23-31行 是定义表的开始. 需要继承Document 这个类. class 这段基本照抄, 注意修改name为真正的表名即可. 另外注意28行, 以_id的方式定义了主键id. 29-31定义其他的字段.


34-40行 演示如何增加数据. 增加数据仿佛新建一个对象那么自然, 只要在最后调用实例.m.save() 这个方法就行了. (第40)行.


43-46 展示了如何查找数据. 表明.m.find() 表示得到这个表的所有数据.
它会返回一个iterable 对象, 你可以用for来遍历它, 从而访问每一条数据. 值得注意的是46行. 如果要访问数据的主键,
通常用str(对象._id) 来得到(注意id前的_). 为什么不用id而用_id呢? 因为在python里id这个名字实在太危险了,
很多框架都用id. 所以ming为了避免这个潜在的危险, 用_id了.


_id是一个ObjectId 对象(见28行), 所以你要用str进行转型, 才会输出字符串.


mongodb 客户端


好了, 用程序你已经知道, 一个用户数据已经插到数据库了. 如果想用工具访问怎么办? mongodb支持命令行访问, 当然更方便的是用gui工具. 最好用的是robomongo这个客户端, 下载地址在这里: 客户端工具robomongo下载地址


安装连接都很简单, 不再多说. 打开之后是这样:


你也许开始懵了. 如果要查找数据, 用什么语言呢? sql数据库用sql, mongodb 用什么? 答案是用key-value 进行查找,
非常像js语法. 再看看下面这个需求: 找出name是test的数据, 那么查询条件是这样:
db.getCollection('user').find({'name':'test'}) , 如下图:



是不是很有趣? 哈哈.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3141289/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39921