iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
Modern Web

三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。系列 第 13

三十天全端學習(javascript、python、mongoDB)---第十三天:python驅動mongoDB I

第十三天:python驅動mongoDB (I)

預計會花2-3天的時間,帶大家操作如何透過python套件pymongo來驅動mongoDB,之後再全端整合的部分,還會更深入的介紹到我使用的其他技巧。


前提概要

day12算是把node.js驅動mongoDB的基礎部分說完了,最基本的資料庫操作為C(新增)、R(讀取)、U(更新)、D(刪除),剩下的進階就讓大家去深究吧。


本文概要

透過python驅動mongoDB中的C(新增)、R(讀取)之介紹,並附上W3C的線上學習資料。
今天的程式碼也會上傳到github中的day13資料夾。


正文開始

黑修斯一開始也是透過W3C的教程與mongoDB官方自學而成,這邊帶大家做過兩個基本的新增與讀取的功能,首先最重要的就是先來個小作業:先透過python確認與mongoDB連上線。

1. 連線mongoDB

如果沒有安裝pymongo,請先在cmd模式下安裝,這邊透過pip安裝,指令如下:

$ pip install pymongo

以下是最基本的連線mongoDB的程式,如果你的DB不存在,會自動幫你建立一個。

import pymongo

#連接本地端mongoDB
myclient = pymongo.MongoClient("mongodb://localhost:27017/")

#填入你的DB名稱
mydb_Name="HeartRate"

#設mydb繼承myclient[mydb_Name]的屬性。
mydb = myclient[mydb_Name]

#印出所有DB的名稱
print("目前存在的DB有  ",myclient.list_database_names())

#如果DB存在,則印出
dblist = myclient.list_database_names()
if mydb_Name in dblist:
  print("您的DB: {0}存在".format(mydb_Name))

最終執行結果如下:(左邊為執行結果,右邊會程式碼,這是python自帶的編輯器,我們在day4中有介紹使用方式)

2. 創建你的collection

請在上一節程式碼中加入以下程式碼,就可以創建collection,程式碼看起來是在確認,但mongoDB的機制是如果你的collection不存在,那就幫你創建一個。

#第二小節加入的地方-----------
#你的collection名稱
mycol = mydb["h1f001"]


print("目前存在的collection有  ",mydb.list_collection_names())

#如果collection存在,則印出
collist = mydb.list_collection_names()
if "h1f001" in collist:
  print("您的collection存在")

最終的執行結果如下圖:

3. 插入資料到mongoDB

第三小節,會介紹單筆資料插入,多筆資料插入。
單筆使用insert_one(),多筆使用insert_many()
請延續第二節的程式,並加入以下程式:

#第三小節加入的地方---------單筆資料
  
mydict = { "name": "黑修斯", "says": "Hello 你好嗎?" }

x = mycol.insert_one(mydict)

print("插入單筆成功")

最後的結果會如下:

透過Robo 3T可以看到,單筆資料已經加入了,因為我連按兩下,所以資料插入了兩次。

3.1 插入多筆資料

請替換第三小節的部分

#第三小節加入的地方---------多筆資料
  
mydict = { "name": "黑修斯", "says": "Hello 你好嗎?" }

mylist = [
  { "name": "黑修斯1", "says": "Hello 你好嗎?"},
  { "name": "黑修斯2", "says": "衷心感謝"},
  { "name": "黑修斯3", "says": "感謝有你"},
  { "name": "黑修斯4", "says": "接受我"},
  { "name": "黑修斯5", "says": "衷心感謝"},
  { "name": "黑修斯6", "says": "珍重相見"},
  { "name": "黑修斯7", "says": "期待再相逢"}
]

x = mycol.insert_many(mylist)

#print list of the _id values of the inserted documents:
print("插入多筆資料成功 返回_id值 ",x.inserted_ids)

最終的結果如下:

透過Robo 3T可以看到,多筆資料已經加入了

額外補充:特殊_id插入,這個就是有興趣的看官去研究了。

4. 搜尋資料

搜尋資料就很容易了,使用find_one()找單筆,find()找全部。

可以替換第三小節程式碼,只單獨使用查詢。

#第四小節加入的地方-------
#找最上方一筆
x = mycol.find_one()

print(x)

#找出全部
for x in mycol.find():
  print(x)

找到的最終結果如下圖:

小作業:

請比較找單筆與找多筆的用法

閱讀補充:

W3C---python to mongoDB


小結

今天介紹創建資料庫或資料集,並了解插入資料與查詢資料,明天會帶大家實作更多。


上一篇
三十天全端學習(javascript、python、mongoDB)---第十二天:MongoDB安裝與使用IV---使用node.js驅動實作練習
下一篇
三十天全端學習(javascript、python、mongoDB)---第十四天:python驅動mongoDB (II)
系列文
三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
jton
iT邦新手 5 級 ‧ 2022-10-13 16:38:48

我在被建議可以使用" client.list_database_names() "後找到您的範本,依照您的方法我卻失敗了,方便的話可以幫我看看嗎
https://stackoverflow.com/questions/74050167/how-to-read-and-write-from-existing-mongodb-by-ip-address

jton iT邦新手 5 級 ‧ 2022-10-13 16:40:51 檢舉

藉由連上nosqlbooster 我知道我的ip address 能用,可用pymongo 方式連同樣的ip address 卻沒連上

我要留言

立即登入留言