Library Pymongo
จริงๆ มันก็เป็นเรื่องคาบเกี่ยวทั้ง ภาษา กับ ดาต้าเบสนะครับ แต่เนื่องด้วยว่า หลักๆ เราจะใช้ภาษาไพธอน ในการเชื่อมต่อฐานข้อมูลของ MongoDB ดังนั้น ถ้าเอาไว้หมวดเดียวกับ MongoDB แล้วพอมีใช้ภาษาอื่น มันก็จะมีเพิ่มขึ้นเรื่อยๆ คงจะแปลกๆ เลยเอาไว้ในนี้ละกัน (ผมสร้าง environment Python 3.6 มาทดลองนะครับ)
- pip3 install pymongo ก่อนอื่นก็ติดตั้ง library pymongo เวอร์ชั่นปัจจุบันที่ใช้ตอนนี้คือ 3.12.0 นะครับ
- สร้าง script Python (ใครที่ยังไม่มีพื้นฐานส่วนนี้ดู ที่นี้ นะครับ)
- #!/usr/bin/env python3 บรรทัดแรกตามปกติ
- from pymongo import MongoClient เพื่อ import library ของ pymongo ไว้บนสุดนะครับ
- import pprint อันนี้สำหรับความสวยงามของการแสดงผลครับ
- client=MongoClient('mongodb://localhost:27017') กำหนดค่าที่ต้องใช้ในการเชื่อมต่อฐานข้อมูลนะครับ อันนี้ผมใช้ในเครื่องตัวเอง ยังไม่ได้ตั้งไอดี พาสอะไร เลยยังไม่ต้องใส่
- listDB=client.list_database_names() อันนี้ใช้ดูรายชื่อฐานข้อมูลทั้งหมดที่มีนะครับ (ดึงรายชื่อ -> ตัวแปร)
- print ("list Database : ",listDB) แล้วก็สั่งให้มันแสดงออกมาทาง terminal นะครับ (แน่นอนว่าไม่ได้อัพเดตตลอดเวลา จะดูการเปลี่ยนแปลงก็ต้องทำใหม่)
- useDB=client.test อันนี้เราต้องการจะเข้าใช้ฐานข้อมูล test นะครับ แต่ถ้ายังไม่มีฐานข้อมูลนั้นอยู่มันจะสร้างใหม่ให้ แต่ต้องมีข้อมูลใส่เข้าไปอย่างน้อยๆ หนึ่งอย่างก่อน มันถึงจะสร้างเสร็จสมบูรณ์
- useCollection=useDB.newCollection เริ่มสร้าง collection ใหม่
- insertOne=useCollection.insert_one({"NAME":"valenteer","ADDRESS":"world"}) ลองใส่ข้อมูลเข้าไป
- listCollection=useDB.list_collection_names() ดึงข้อมูลของ collection ทั้งหมดมาเก็บไว้ในตัวแปร
- print ("list Collection : ",listCollection) สั่งให้แสดงผลทาง terminal นะครับ
- listDoc=useCollection.find({}) อันนี้สั่งเก็บข้อมูล document จากฐานข้อมูลเข้าตัวแปรนะครับ
- for doc in listDoc: ให้ตัวแปร doc เป็นค่าใน listDoc ที่มีข้อมูลจากฐานข้อมูลนะครับ
pprint.pprint ("document : ",doc) สั่งให้มันแสดงผลทีละข้อมูล ซึ่งเรามีอันเดียวนะครับ - manyRow=[{"NAME" : "testScript1","OPTION" : "addManyRow1"}, ลองเอาเข้าหลาย Row
{"NAME" : "testScript2","OPTION" : "addManyRow2"}] เอาทั้ง 2 Row ใส่ในตัวแปร - insertMany=useCollection.insert_many(manyRow) เพิ่มเข้าไปในฐานข้อมูล ให้ใช้ print แบบ 14-15 เพื่อดูผลได้ ซึ่งหลังจากนี้จะขอข้ามส่วนแสดงผลละกัน
- findx=useCollection.find({"NAME" : "testScript1"}) ลองค้นหาแบบมีเงื่อนไขนะครับ ข้อมูลจะอยู่ใน findx ให้ใช้ print แบบข้อ 14. เพื่อดูผลได้ แต่แทน listDoc ด้วย findx นะครับ
- findx=useCollection.find({"NAME": {"$regex": ".es."},"OPTION" : {"$regex": ".2"}}) อันนี้ลองแบบมีเงื่อนไขสองเงื่อนไขนะครับ (จริงๆ เรียกตรงๆ ก็ได้แหละ อันนี้เทสคำสั่งสองเงื่อนไขให้ดูเฉยๆ นะครับ) โดยเรายัดเข้าตัวแปรตัวเดิม ดังนั้นข้อมูลเก่าในข้อ 18. ก็จะถูกลบไป
- allDoc=useCollection.count_documents({}) อันนี้ใช้นับจำนวนของ Document ทั้งหมดนะครับ print (allDoc) ได้เลย เพราะมีข้อมูลเดียว
- upDoc=useCollection.update_many({"NAME": {"$regex": ".es."}},{"$set":{"OPTION" : 2}}) อัพเดตนะครับ คำสั่งใน () จะอิงมาคล้ายของ MongoDB เลย แต่มีต้องครอบ " " เพิ่มบางส่วน
- delDoc=useCollection.delete_many({"NAME": "valenteer"}) ลบข้อมูล
- useDB.newCollection.drop() ลบ collection ที่เราใช้นะครับ (อย่าตั้งชื่อฐานข้อมูล เหมือนกับชื่อ collection นะครับ เพราะมันลบได้เหมือนกัน ย้ำ)
ความคิดเห็น
แสดงความคิดเห็น