|作为一个用着和领扣 LeetCode 同样技术栈 —— Python 的程序员,对于平时一些小的想法和 Demo 自然是通过 Python 来解决,但是在学习和使用的过程中,对于数据的存储一直难以统一,最初使用纯文本文件存储,发现对于格式化索引来说纯文本存储效率太低,之后又转了 MySQL 存储,但是发现过于复杂,对于一些热更新数据来说写起来十分不雅观,限制太多,无奈便换成了 JSON 格式存储,当然,那是在现在使用的 MongoDB 之前了。
MongoDB 概要
MongoDB 用起来其实比较随意,相关命令遍写的感觉和 Python 这类弱类型语言很相似,用起来比较 Geek。
MongoDB 是一个面向文档的数据库,目前由 10gen 开发并维护,它的功能丰富,齐全,完全可以替代 MySQL。 MonogDB 的一些亮点:
使用 JSON 风格 语法,易于掌握和理解:MongoDB 使用 JSON 的变种 BSON 作为内部存储的格式和语法。针对 MongoDB 的操作都使用 JSON 风格语法,客户端提交或接收的数据都使用 JSON 形式来展现。相对于 SQL来说,更加直观,容易理解和掌握。
Schema-less,支持嵌入子文档:MongoDB 是一个 Schema-free 的文档数据库。一个数据库可以有多个Collection,每个 Collection 是Documents的集合。Collection 和 Document 和传统数据库的 Table 和 Row并不对等。无需事先定义 Collection,随时可以创建。
Collection中可以包含具有不同 schema 的文档记录。 这意味着,你上一条记录中的文档有3个属性,而下一条记录的文档可以有10个属 性,属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以是数组或者散列,甚至还可以是一个子文档(embed document)。这样,可以实现逆规范化(denormalizing)的数据模型,提高查询的速度。
如果在本地测试或者仅仅是为了临时丢一些数据进去的话,安装并启动 mongod 后直接在命令行下 mongo 即可完成连接,默认没有连接密码,如果看到类似如下提示的话,说明 MongoDB 已经安装完成了:
Python + MongoDB
下面让 Python 连接上 MongoDB:
安装 PyMongo:
pip3 install pymongo
在 Python 中引入:
import pymongo
指定数据表并连接:
# 默认的 MongoDB 监听地址
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
# 使用上一步建立的 myclient 连接,并且使用 leetcode 数据库
db = myclient["leetcode"]
# 使用 db 连接的 leetcode 数据库中的 articles 表
table = db['articles']
增删改查:
# 定义我们要插入的数据,JSON 格式,在 Python 中就是 Dict 格式
post = {"author": "Nova Kwok",
"text": "LeetCode is in China!",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()}
插入一条记录:
# 插入一条记录并返回插入 ID
post_id = posts.insert_one(post).inserted_id
查询记录,这里我们需要多 import 一个包,pprint:
import pprint
pprint.pprint(posts.find_one())
返回结果:
{u'_id': ObjectId('...'),
u'author': u'Nova Kwok',
u'date': datetime.datetime(...),
u'tags': [u'mongodb', u'python', u'pymongo'],
u'text': u'LeetCode is now in China!'}