成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

微信公號DIY:MongoDB 簡易ORM & 公號記賬數(shù)據(jù)庫設計

DoINsiSt / 1119人閱讀

摘要:然后又介紹了基于的公號賬本應用的數(shù)據(jù)庫設計。歡迎關注公號四月試用。

前兩篇 微信公號DIY 系列:

微信公號DIY:一小時搭建微信聊天機器人

微信公號DIY:訓練聊天機器人&公號變身圖片上傳工具

介紹了如何使用搭建&訓練聊天機器人以及讓公號支持圖片上傳到七牛,把公號變成一個七牛圖片上傳客戶端。這一篇將繼續(xù)開發(fā)公號,讓公號變成一個更加實用的工具賬本(理財從記賬開始)。

代碼: 項目代碼已上傳至github,地址為:gusibi/momo

賬本功能

賬本是一個功能比較簡單應用,公號內只需要支持:

記賬(記賬,修改金額,取消記賬)

賬單統(tǒng)計(提供數(shù)據(jù)和圖片形式的統(tǒng)計功能)

當然后臺管理功能就比較多了,這個以后再介紹。

對于數(shù)據(jù)存儲,我選擇的是MongoDB(選MongoDB的原因是,之前沒用過,想試一下),我們先看下MongoDB和關系型數(shù)據(jù)庫的不同。

MongoDB 什么是MongoDB ?

MongoDB 是由C++語言編寫的,是一個開放源代碼的面向文檔的數(shù)據(jù)庫,易于開發(fā)和縮放。

mongo和傳統(tǒng)關系數(shù)據(jù)庫的最本質的區(qū)別在那里呢?MongoDB 是文檔模型。

關系模型和文檔模型的區(qū)別在哪里?

關系模型需要你把一個數(shù)據(jù)對象,拆分成零部件,然后存到各個相應的表里,需要的是最后把它拼起來。舉例子來說,假設我們要做一個CRM應用,那么要管理客戶的基本信息,包括客戶名字、地址、電話等。由于每個客戶可能有多個電話,那么按照第三范式,我們會把電話號碼用多帶帶的一個表來存儲,并在顯示客戶信息的時候通過關聯(lián)把需要的信息取回來。

而MongoDB的文檔模式,與這個模式大不相同。由于我們的存儲單位是一個文檔,可以支持數(shù)組和嵌套文檔,所以很多時候你直接用一個這樣的文檔就可以涵蓋這個客戶相關的所有個人信息。關系型數(shù)據(jù)庫的關聯(lián)功能不一定就是它的優(yōu)勢,而是它能夠工作的必要條件。 而在MongoDB里面,利用富文檔的性質,很多時候,關聯(lián)是個偽需求,可以通過合理建模來避免做關聯(lián)。

MongoDB 概念解析

在mongodb中基本的概念是文檔、集合、數(shù)據(jù)庫,下表是MongoDB和關系型數(shù)據(jù)庫概念對比:

SQL術語/概念 MongoDB術語/概念 解釋/說明
database database 數(shù)據(jù)庫
table collection 數(shù)據(jù)庫表/集合
row document 數(shù)據(jù)記錄行/文檔
column field 數(shù)據(jù)字段/域
index index 索引
table joins 表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動將_id字段設置為主鍵

通過下圖實例,我們也可以更直觀的的了解Mongo中的一些概念:

接下來,我從使用的角度來介紹下如何使用 python 如何使用MongoDB,在這個過程中,我會實現(xiàn)一個簡單的MongoDB的ORM,同時也會解釋一下涉及到的概念。

簡易 Python MongoDB ORM python 使用 mongodb

首先,需要確認已經(jīng)安裝了 PyMongo,如果沒有安裝,使用以下命令安裝:

pip install pymongo
# 或者
easy_install pymongo

詳細安裝步驟參考: PyMongo Installing / Upgrading

連接 MongoClient:
>>> from pymongo import MongoClient
>>> client = MongoClient()

上述命令會使用Mongo的默認host和端口號,和以下命令作用相同:

client = MongoClient("localhost", 27017) # mongo 默認端口號
為27017
# 也可以這樣寫
client = MongoClient("mongodb://localhost:27017/")
選擇一個數(shù)據(jù)庫

獲取 MongoClient 后我們接下來要做的是選擇要執(zhí)行的數(shù)據(jù)庫,命令如下:

>>> db = client.test_database # test_database 是選擇的數(shù)據(jù)庫名稱
# 也可以使用下述方式
>>> db = client["test-database"]

數(shù)據(jù)庫(Database)
一個mongodb中可以建立多個數(shù)據(jù)庫。

MongoDB的默認數(shù)據(jù)庫為"db",該數(shù)據(jù)庫存儲在data目錄中。
MongoDB的單個實例可以容納多個獨立的數(shù)據(jù)庫,每一個都有自己的集合和權限,不同的數(shù)據(jù)庫也放置在不同的文件中。
"show dbs" 命令可以顯示所有數(shù)據(jù)的列表。

執(zhí)行 "db" 命令可以顯示當前數(shù)據(jù)庫對象或集合。
運行"use"命令,可以連接到一個指定的數(shù)據(jù)庫。

獲取集合

選擇數(shù)據(jù)庫后,接下來就是選擇一個集合(Collection),獲取一個集合和選擇一個數(shù)據(jù)庫的方式基本一致:

>>> collection = db.test_collection  # test_collection 是集合名稱
# 也可以使用字典的形式
>>> collection = db["test-collection"]

集合(collection)
集合就是 MongoDB 文檔組,類似于 RDBMS (關系數(shù)據(jù)庫管理系統(tǒng):Relational Database Management System)中的表。

集合存在于數(shù)據(jù)庫中,集合沒有固定的結構,這意味著你在對集合可以插入不同格式和類型的數(shù)據(jù),但通常情況下我們插入集合的數(shù)據(jù)都會有一定的關聯(lián)性。

當?shù)谝粋€文檔插入時,集合就會被創(chuàng)建。
集合名不能是空字符串""。
集合名不能含有