Welcome 微信登录

首页 / 数据库 / MySQL / MongoDb 的Python支持

本文是一个Python 使用MongoDB的简单教程,将使用pymongo对MongoDB进行的各种操作进行了简单的汇总,我们进行了简单整理,使用Python的同学可以看一看。下载相应平台的版本,解压即可。为方便使用,将bin路径添加到系统path环境变量里。其中mongod是服务器,mongo是客户shell,然后创建数据文件目录:在c盘下创建data文件夹,里面创建db文件夹。基本使用:安装对应语言的Driver,Python 安装 pymongo
1$ easy_install pymongo
使用方法总结,摘自官方教程创建连接
1>>> import pymongo
2>>> connection=pymongo.Connection("localhost",27017
切换数据库
1>>> db = connection.test_database
获取collection
1>>> collection = db.test_collection
db和collection都是延时创建的,在添加Document时才真正创建文档添加,_id自动创建
1>>> import datetime
2>>> post = {"author": "Mike",
3...         "text": "My first blog post!",
4...         "tags": ["mongodb", "python", "pymongo"],
5...         "date": datetime.datetime.utcnow()}
6>>> posts = db.posts
7>>> posts.insert(post)
8ObjectId("..."
批量插入
01>>> new_posts = [{"author": "Mike",
02...               "text": "Another post!",
03...               "tags": ["bulk", "insert"],
04...               "date": datetime.datetime(2009, 11, 12, 11, 14)},
05...              {"author": "Eliot",
06...               "title": "MongoDB is fun",
07...               "text": "and pretty easy too!",
08...               "date": datetime.datetime(2009, 11, 10, 10, 45)}]
09>>> posts.insert(new_posts)
10[ObjectId("..."), ObjectId("...")]
获取所有collection(相当于SQL的show tables)
1>>> db.collection_names()
2[u"posts", u"system.indexes"]
获取单个文档
1>>> posts.find_one()
2{u"date": datetime.datetime(...), u"text": u"My first blog post!", u"_id": ObjectId("..."), u"author": u"Mike", u"tags": [u"mongodb", u"python", u"pymongo"]}
查询多个文档view source print?
1>> for post in posts.find():
2...   post
3...
4{u"date": datetime.datetime(...), u"text": u"My first blog post!", u"_id": ObjectId("..."), u"author": u"Mike", u"tags": [u"mongodb", u"python", u"pymongo"]}
5{u"date": datetime.datetime(2009, 11, 12, 11, 14), u"text": u"Another post!", u"_id": ObjectId("..."), u"author": u"Mike", u"tags": [u"bulk", u"insert"]}
6{u"date": datetime.datetime(2009, 11, 10, 10, 45), u"text": u"and pretty easy too!", u"_id": ObjectId("..."), u"author": u"Eliot", u"title": u"MongoDB is fun"}
加条件的查询
1>>> posts.find_one({"author": "Mike"})
高级查询
1>>> posts.find({"date": {"$lt": d}}).sort("author"
统计数量
1>>> posts.count()
23
加索引
1>>> from pymongo import ASCENDING, DESCENDING
2>>> posts.create_index([("date", DESCENDING), ("author", ASCENDING)])
3u"date_-1_author_1"
查看查询语句的性能
1>>> posts.find({"date": {"$lt": d}}).sort("author").explain()["cursor"]
2u"BtreeCursor date_-1_author_1"
3>>> posts.find({"date": {"$lt": d}}).sort("author").explain()["nscanned"]
42
附自己总结的一点小心得,仅供参考缺点
  • 不是全盘取代传统数据库(NoSQLFan:是否能取代需要看应用场景)
  • 不支持复杂事务(NoSQLFan:MongoDB只支持对单个文档的原子操作)
  • 文档中的整个树,不易搜索,4MB限制?(NoSQLFan:1.8版本已经修改为16M)
特点(NoSQLFan:作者在这里列举的很多只是一些表层的特点):
  • 文档型数据库,表结构可以内嵌
  • 没有模式,避免空字段开销(Schema Free)
  • 分布式支持
  • 查询支持正则
  • 动态扩展架构
  • 32位的版本最多只能存储2.5GB的数据(NoSQLFan:最大文件尺寸为2G,生产环境推荐64位)
名词对应
  • 一个数据项叫做 Document(NoSQLFan:对应MySQL中的单条记录)
  • 一个文档嵌入另一个文档(comment 嵌入 post)叫做 Embed
  • 储存一系列文档的地方叫做 Collections(NoSQLFan:对应MySQL中的表)
  • 表间关联,叫做 Reference
Oracle Database 基本概念ORA-02291: 违反完整约束条件 (*) - 未找到父项关键字相关资讯      python  MongoDB 
  • Python 为什么要迁移到 Github  (01月26日)
  • Python 决定迁移到 GitHub  (01月03日)
  • 使用MongoDB C#官方驱动操作  (12/31/2015 16:27:56)
  • MongoDB 3.3.0 发布下载  (01月14日)
  • MongoDB 3.2版WiredTiger存储引擎  (01月02日)
  • 进程监控工具Supervisor 启动  (12/26/2015 10:49:57)
本文评论 查看全部评论 (0)
表情: 姓名: 字数