国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微信公號(hào)DIY:MongoDB 簡(jiǎn)易ORM & 公號(hào)記賬數(shù)據(jù)庫(kù)設(shè)計(jì)

DoINsiSt / 1110人閱讀

摘要:然后又介紹了基于的公號(hào)賬本應(yīng)用的數(shù)據(jù)庫(kù)設(shè)計(jì)。歡迎關(guān)注公號(hào)四月試用。

前兩篇 微信公號(hào)DIY 系列:

微信公號(hào)DIY:一小時(shí)搭建微信聊天機(jī)器人

微信公號(hào)DIY:訓(xùn)練聊天機(jī)器人&公號(hào)變身圖片上傳工具

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

代碼: 項(xiàng)目代碼已上傳至github,地址為:gusibi/momo

賬本功能

賬本是一個(gè)功能比較簡(jiǎn)單應(yīng)用,公號(hào)內(nèi)只需要支持:

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

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

當(dāng)然后臺(tái)管理功能就比較多了,這個(gè)以后再介紹。

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

MongoDB 什么是MongoDB ?

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

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

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

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

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

MongoDB 概念解析

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

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

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

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

簡(jiǎn)易 Python MongoDB ORM python 使用 mongodb

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

pip install pymongo
# 或者
easy_install pymongo

詳細(xì)安裝步驟參考: PyMongo Installing / Upgrading

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

上述命令會(huì)使用Mongo的默認(rèn)host和端口號(hào),和以下命令作用相同:

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

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

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

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

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

執(zhí)行 "db" 命令可以顯示當(dāng)前數(shù)據(jù)庫(kù)對(duì)象或集合。
運(yùn)行"use"命令,可以連接到一個(gè)指定的數(shù)據(jù)庫(kù)。

獲取集合

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

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

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

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

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