預計會花2-3天的時間,帶大家操作如何透過python套件pymongo來驅動mongoDB,之後再全端整合的部分,還會更深入的介紹到我使用的其他技巧。
day12
算是把node.js驅動mongoDB的基礎部分說完了,最基本的資料庫操作為C(新增)、R(讀取)、U(更新)、D(刪除),剩下的進階就讓大家去深究吧。
透過python驅動mongoDB中的C(新增)、R(讀取)之介紹,並附上W3C的線上學習資料。
今天的程式碼也會上傳到github中的day13
資料夾。
黑修斯一開始也是透過W3C的教程與mongoDB官方自學而成,這邊帶大家做過兩個基本的新增與讀取的功能,首先最重要的就是先來個小作業:先透過python確認與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
中有介紹使用方式)
請在上一節程式碼中加入以下程式碼,就可以創建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存在")
最終的執行結果如下圖:
第三小節,會介紹單筆資料插入,多筆資料插入。
單筆使用insert_one()
,多筆使用insert_many()
。
請延續第二節的程式,並加入以下程式:
#第三小節加入的地方---------單筆資料
mydict = { "name": "黑修斯", "says": "Hello 你好嗎?" }
x = mycol.insert_one(mydict)
print("插入單筆成功")
最後的結果會如下:
透過Robo 3T可以看到,單筆資料已經加入了,因為我連按兩下,所以資料插入了兩次。
請替換第三小節的部分
#第三小節加入的地方---------多筆資料
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插入,這個就是有興趣的看官去研究了。
搜尋資料就很容易了,使用find_one()
找單筆,find()
找全部。
可以替換第三小節程式碼,只單獨使用查詢。
#第四小節加入的地方-------
#找最上方一筆
x = mycol.find_one()
print(x)
#找出全部
for x in mycol.find():
print(x)
找到的最終結果如下圖:
請比較找單筆與找多筆的用法
今天介紹創建資料庫或資料集,並了解插入資料與查詢資料,明天會帶大家實作更多。
我在被建議可以使用" client.list_database_names() "後找到您的範本,依照您的方法我卻失敗了,方便的話可以幫我看看嗎
https://stackoverflow.com/questions/74050167/how-to-read-and-write-from-existing-mongodb-by-ip-address
藉由連上nosqlbooster
我知道我的ip address 能用,可用pymongo
方式連同樣的ip address 卻沒連上