Python Data Persistence - โมดูล PyMongo
MongoDB เป็นเอกสารที่มุ่งเน้น NoSQLฐานข้อมูล. เป็นฐานข้อมูลข้ามแพลตฟอร์มที่เผยแพร่ภายใต้ใบอนุญาตสาธารณะฝั่งเซิร์ฟเวอร์ ใช้ JSON เหมือนเอกสารเป็นสคีมา
เพื่อให้มีความสามารถในการจัดเก็บข้อมูลขนาดใหญ่จะมีการเชื่อมต่อเซิร์ฟเวอร์จริงมากกว่าหนึ่งเครื่อง (เรียกว่าชาร์ด) เพื่อให้สามารถปรับขนาดได้ตามแนวนอน ฐานข้อมูล MongoDB ประกอบด้วยเอกสาร
เอกสารมีลักษณะคล้ายกับแถวในตารางฐานข้อมูลเชิงสัมพันธ์ อย่างไรก็ตามไม่มีสคีมาเฉพาะ เอกสารคือชุดของคู่คีย์ - ค่า - คล้ายกับพจนานุกรม อย่างไรก็ตามจำนวนคู่ kv ในเอกสารแต่ละฉบับอาจแตกต่างกันไป เช่นเดียวกับตารางในฐานข้อมูลเชิงสัมพันธ์มีคีย์หลักเอกสารในฐานข้อมูล MongoDB จะมีคีย์พิเศษที่เรียกว่า"_id".
ก่อนที่เราจะดูว่าฐานข้อมูล MongoDB ใช้กับ Python อย่างไรให้เราเข้าใจสั้น ๆ เกี่ยวกับวิธีการติดตั้งและเริ่มต้น MongoDB MongoDB เวอร์ชันชุมชนและเชิงพาณิชย์มีให้บริการ รุ่นชุมชนสามารถดาวน์โหลดได้จากwww.mongodb.com/download-center/community
สมมติว่ามีการติดตั้ง MongoDB ใน c: \ mongodb เซิร์ฟเวอร์สามารถเรียกใช้โดยใช้คำสั่งต่อไปนี้
c:\mongodb\bin>mongod
เซิร์ฟเวอร์ MongoDB ทำงานที่พอร์ตหมายเลข 22017 โดยค่าเริ่มต้น ฐานข้อมูลจะถูกเก็บไว้ในโฟลเดอร์ data / bin ตามค่าเริ่มต้นแม้ว่าตำแหน่งสามารถเปลี่ยนแปลงได้โดยตัวเลือก –dbpath
MongoDB มีชุดคำสั่งของตัวเองที่จะใช้ใน MongoDB shell ในการเรียกใช้เชลล์ให้ใช้Mongo คำสั่ง
x:\mongodb\bin>mongo
เชลล์พร้อมต์ที่คล้ายกับ MySQL หรือ SQLite shell prompt ปรากฏขึ้นก่อนที่คำสั่ง NoSQL ดั้งเดิมที่สามารถเรียกใช้งานได้ อย่างไรก็ตามเราสนใจที่จะเชื่อมต่อฐานข้อมูล MongoDB กับ Python
PyMongoโมดูลได้รับการพัฒนาโดย MongoDB Inc เองเพื่อให้มีอินเตอร์เฟสการเขียนโปรแกรม Python ใช้ยูทิลิตี้ pip ที่รู้จักกันดีเพื่อติดตั้ง PyMongo
pip3 install pymongo
สมมติว่าเซิร์ฟเวอร์ MongoDB ทำงานอยู่ (ด้วยไฟล์ mongod คำสั่ง) และกำลังฟังที่พอร์ต 22017 ก่อนอื่นเราต้องประกาศไฟล์ MongoClientวัตถุ. ควบคุมธุรกรรมทั้งหมดระหว่างเซสชัน Python และฐานข้อมูล
from pymongo import MongoClient
client=MongoClient()
ใช้อ็อบเจ็กต์ไคลเอ็นต์นี้เพื่อสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ MongoDB
client = MongoClient('localhost', 27017)
ฐานข้อมูลใหม่ถูกสร้างขึ้นด้วยคำสั่งต่อไปนี้
db=client.newdb
ฐานข้อมูล MongoDB สามารถมีหลายคอลเลกชันคล้ายกับตารางในฐานข้อมูลเชิงสัมพันธ์ วัตถุคอลเลกชันถูกสร้างขึ้นโดยCreate_collection() ฟังก์ชัน
db.create_collection('students')
ตอนนี้เราสามารถเพิ่มเอกสารอย่างน้อยหนึ่งรายการในคอลเล็กชันได้ดังนี้ -
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
db.create_collection("students")
student=db['students']
studentlist=[{'studentID':1,'Name':'Juhi','age':20, 'marks'=100},
{'studentID':2,'Name':'dilip','age':20, 'marks'=110},
{'studentID':3,'Name':'jeevan','age':24, 'marks'=145}]
student.insert_many(studentlist)
client.close()
ในการดึงเอกสาร (คล้ายกับแบบสอบถาม SELECT) เราควรใช้ find()วิธี. จะส่งคืนเคอร์เซอร์ด้วยความช่วยเหลือซึ่งสามารถรับเอกสารทั้งหมดได้
students=db['students']
docs=students.find()
for doc in docs:
print (doc['Name'], doc['age'], doc['marks'] )
หากต้องการค้นหาเอกสารใดเอกสารหนึ่งแทนที่จะเป็นเอกสารทั้งหมดในคอลเล็กชันเราจำเป็นต้องใช้ตัวกรองเพื่อค้นหา () วิธีการ ตัวกรองใช้ตัวดำเนินการทางตรรกะ MongoDB มีชุดตัวดำเนินการเชิงตรรกะของตัวเองดังต่อไปนี้ -
ซีเนียร์ No | ตัวดำเนินการ MongoDB และตัวดำเนินการเชิงตรรกะแบบดั้งเดิม |
---|---|
1 | $eq เท่ากับ (==) |
2 | $gt มากกว่า (>) |
3 | $gte มากกว่าหรือเท่ากับ (> =) |
4 | $in ถ้าเท่ากับค่าใด ๆ ในอาร์เรย์ |
5 | $lt น้อยกว่า (<) |
6 | $lte น้อยกว่าหรือเท่ากับ (<=) |
7 | $ne ไม่เท่ากับ (! =) |
8 | $nin ถ้าไม่เท่ากับค่าใด ๆ ในอาร์เรย์ |
ตัวอย่างเช่นเราสนใจรับรายชื่อนักเรียนที่มีอายุมากกว่า 21 ปี ใช้ตัวดำเนินการ $ gt ในตัวกรองสำหรับfind() วิธีการดังนี้ -
students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
print (doc.get('Name'), doc.get('age'), doc.get('marks'))
โมดูล PyMongo ให้ update_one() และ update_many() วิธีการแก้ไขเอกสารหนึ่งเอกสารหรือมากกว่าหนึ่งเอกสารที่เป็นไปตามนิพจน์ตัวกรองเฉพาะ
ให้เราอัปเดตเครื่องหมายแอตทริบิวต์ของเอกสารที่ชื่อ Juhi
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
doc=db.students.find_one({'Name': 'Juhi'})
db['students'].update_one({'Name': 'Juhi'},{"$set":{'marks':150}})
client.close()