分类
大小:1.6M更新:2017-10-29
类别:数据库类系统:WinAll,WinXP
Python 使用MongoDB的简单教程,将使用pymongo对MongoDB进行的各种操作进行了简单的汇总,NoSQLFan进行了简单整理,使用Python的同学可以看一看。
下载相应平台的版本,解压即可。为方便使用,将bin路径添加到系统path环境变量里。其中mongod是服务器,mongo是客户shell,然后创建数据文件目录:在c盘下创建data文件夹,里面创建db文件夹。
1.先安装PIP
2.CMD命令进入C:\Python34\Scripts里面后再执行PIP命令安装pip install wheel
3.把文件最好放在\Script文件夹里面再pip install xxxx.whl
4.注意whl文件名不能改 必须一模一样和原名
当前可下载选项:
pymongo-2.6.3.tar.gz Source
pymongo-2.6.3.win32-py2.7.exe MS Windows installer
PyMongo安装
安装pymongo-2.6.3.tar.gz
解压之后,cmd运行语句:
C:\Users\libing>cd /d E:\pymongo-2.6.3
E:\pymongo-2.6.3>python setup.py install
安装pymongo-2.6.3.win32-py2.7.exe
双击打开即可进入安装
安装对应语言的Driver,Python 安装 pymongo
$ easy_install pymongo
使用方法总结,摘自官方教程
创建连接
>>> import pymongo>>> connection=pymongo.Connection('localhost',27017)
切换数据库
>>> db = connection.test_database
获取collection
>>> collection = db.test_collection
db和collection都是延时创建的,在添加Document时才真正创建
文档添加,_id自动创建
>>> import datetime>>> post = {"author": "Mike",... "text": "My first blog post!",... "tags": ["mongodb", "python", "pymongo"],... "date": datetime.datetime.utcnow()}>>> posts = db.posts>>> posts.insert(post)ObjectId('...')
批量插入
>>> new_posts = [{"author": "Mike",... "text": "Another post!",... "tags": ["bulk", "insert"],... "date": datetime.datetime(2009, 11, 12, 11, 14)},... {"author": "Eliot",... "title": "MongoDB is fun",... "text": "and pretty easy too!",... "date": datetime.datetime(2009, 11, 10, 10, 45)}]>>> posts.insert(new_posts)[ObjectId('...'), ObjectId('...')]
获取所有collection(相当于SQL的show tables)
>>> db.collection_names()[u'posts', u'system.indexes']
获取单个文档
>>> posts.find_one(){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']}
查询多个文档
>> for post in posts.find():... post...{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']}{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']}{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'}
加条件的查询
>>> posts.find_one({"author": "Mike"})
高级查询
>>> posts.find({"date": {"$lt": d}}).sort("author")
统计数量
>>> posts.count()3
加索引
>>> from pymongo import ASCENDING, DESCENDING>>> posts.create_index([("date", DESCENDING), ("author", ASCENDING)])u'date_-1_author_1'
查看查询语句的性能
>>> posts.find({"date": {"$lt": d}}).sort("author").explain()["cursor"]u'BtreeCursor date_-1_author_1'>>> posts.find({"date": {"$lt": d}}).sort("author").explain()["nscanned"]2
附自己总结的一点小心得,仅供参考
缺点
不是全盘取代传统数据库(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
引用PyMongo
>>> import pymongo
创建连接Connection
>>> import pymongo
>>> conn = pymongo.Connection('localhost',27017)
或
>>> from pymongo import Connection
>>> conn = Connection('localhost',27017)
创建Connection时,指定host及port参数
>>> import pymongo
>>> conn = pymongo.Connection(host='127.0.0.1',port=27017)
连接数据库
>>> db = conn.ChatRoom
或
>>> db = conn['ChatRoom']
连接聚集
>>> account = db.Account
或
>>> account = db["Account"]
查看全部聚集名称
>>> db.collection_names()
查看聚集的一条记录
>>> db.Account.find_one()
>>> db.Account.find_one({"UserName":"keyword"})
查看聚集的字段
>>> db.Account.find_one({},{"UserName":1,"Email":1})
{u'UserName': u'libing', u'_id': ObjectId('4ded95c3b7780a774a099b7c'), u'Email': u'libing@35.cn'}
>>> db.Account.find_one({},{"UserName":1,"Email":1,"_id":0})
{u'UserName': u'libing', u'Email': u'libing@35.cn'}
查看聚集的多条记录
>>> for item in db.Account.find():
item
>>> for item in db.Account.find({"UserName":"libing"}):
item["UserName"]
查看聚集的记录统计
>>> db.Account.find().count()
>>> db.Account.find({"UserName":"keyword"}).count()
聚集查询结果排序
>>> db.Account.find().sort("UserName") --默认为升序
>>> db.Account.find().sort("UserName",pymongo.ASCENDING) --升序
>>> db.Account.find().sort("UserName",pymongo.DESCENDING) --降序
聚集查询结果多列排序
>>> db.Account.find().sort([("UserName",pymongo.ASCENDING),("Email",pymongo.DESCENDING)])
添加记录
>>> db.Account.insert({"AccountID":21,"UserName":"libing"})
修改记录
>>> db.Account.update({"UserName":"libing"},{"$set":{"Email":"libing@126.com","Password":"123"}})
删除记录
>>> db.Account.remove() -- 全部删除
>>> db.Test.remove({"UserName":"keyword"})
Oracle数据库客户端工具(Oracle SQL Handler)数据库类Mv5.2 官方版
查看sqljdbc.jar 2005数据库类M官方版
查看Sqlite工具(SqliteStudio)数据库类M3.1.1 绿色中文版
查看SQL Server 2008 R2 SP3正式版数据库类M免费简体中文版【64位|32位】
查看SQL数据库管理工具(JetBrains DataGrip)数据库类M2020最新版
查看SQLite可视化管理工具(SQLite Expert Pro)数据库类Mv5.3.4.443 特别版
查看数据库管理软件Database Master数据库类Mv10.6.155.0219 官方版
查看Oracle自动生成POVO小工具数据库类M免费版
查看DB2DB米软异构数据库转换数据库类M1.9.8最新破解版
查看元数据库管理工具Metabase数据库类M0.22.0 最新版
查看MSSQL2000数据库数据库类M简体中文试用版
查看数据库导入导出工具(Benthic Software ImpExpPro)数据库类Mv1.1.21最新版
查看DBF Reanimator(DBF修复工具)数据库类.78M1.10官方版
查看Json导入Oracle软件(JsonToOracle)数据库类Mv1.9官方版
查看数据库同步(SyncNavigator)数据库类Mv8.6.2 中文版
查看JetBrains数据库管理工具(DataGrip)数据库类M2019.2 破解版
查看宝岛台湾数据库工具(Database .NET 5Pro)数据库类Mv28.4中文免费版
查看sql data generator数据库类M1.2 特别版
查看直观数据库管理(Valentina Studio Pro)数据库类Mv10.1.1最新版
查看强大数据库管理及开发工具(Navicat for MySQL)数据库类.02Mv11.0.10 特别版
查看护卫神SQL Server一键装机数据库类.42M1.0.0官方版
查看小骥mdb合并工具数据库类Mv0.61 免费版
查看mysql的odbc链接驱动(mysql connector odbc)数据库类Mv5.3.9英文安装版win32
查看DBeaver Enterprise中文免费版数据库类MV6.0.0安装版
查看点击查看更多