Python核心編程筆記————數據庫編程(二)

非關係型數據庫

NoSQL介紹

. NoSQL的意思是Not Only SQL,也指非關係型數據庫。通常在Web上會產生大量的數據,且產生數據的速率可能比關係型數據庫要更加快,因此 NoSQL 數據庫的發展能很好的處理這些大的數據。
  NoSQL數據庫的類型也比較多,按照存儲類型通常分爲列存儲、文檔存儲、key-value存儲、圖存儲、對象存儲、xml數據庫

MongoDB

. MongoDB是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。它介於簡單的鍵-值對存儲與列存儲之間。一般情況下其數據會另存爲 JSON 對象,並且允許諸如字符串、數值、列表甚至嵌套等數據類型。
  MongoDB 將數據存儲於其特殊的 JSON 文檔中,可以將其想象爲一個 Python 字典,由於它是一個二進制編碼的序列化,因此通常也會稱其爲 BSON 格式。

PyMongo:MongoDB 和 Python

. PyMongo是最正式的MongoDB驅動程序,以下是使用PyMongo的簡單示例:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017")
mydb = myclient["mydb"]
mycol = mydb["mycol"]
mydist = {"name":"tom","age":18}

x = mycol.insert_one(mydist)
print(x)

dblist = myclient.list_database_names()
collist = mydb.list_collection_names()

if "mydb" in dblist:
    print("數據庫存在")

if "mycol" in collist:
    print("集合存在")

. 值得注意的是如果沒有insert_one這一步,下面的輸出都不會出現,因爲MongoDB中數據庫和集合的建立都是在插入記錄後纔會真正的建立。

常規操作

插入

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017")
mydb = myclient["mydb"]
mycol = mydb["mycol"]
mydist = {"name":"tom","age":18,"sex":"man"}    #沒有指定_id字段,會自動給一個

#增加一條數據
mycol.insert_one(mydist)

#增加一組數據
mydists = [
    {"_id":1,"name":"jerry","age":18,"sex":"man"},    #可以指定_id字段
    {"_id":2,"name":"alex","age":19,"sex":"man"},
    {"_id":3,"name":"jack","age":20,"sex":"man"}
    ]
mycol.insert_many(mydists)

刪除

#條件
myquery = {"name":"tom"}
#刪除一條數據
mycol.delete_one(myquery)

myquery2 = {"age":{"$gte":19}}
#刪除多條數據
mycol.delete_many(myquery2)

#傳入參數爲空字典時,表示刪除所有數據
mycol.delete_many({})

#刪除集合
mycol.drop()

修改

myquery = {"name":"tom"}
newvalue = {"$set":{"age":19}}
mycol.update_one(myquery,newvalue)      #修改一條數據,也就是隻匹配第一個

#查詢條件,名字以j開頭的
myquery = {"name":{"$regex":"^j"}}
newvalue = {"$set":{"age":22}}
mycol.update_many(myquery,newvalue)	#修改多條數據

查詢

#查詢一條數據
x = mycol.find_one()
print(x)

#按條件查詢數據,這裏表示查詢age的值小於19的
myquery = {"age":{"$lt":19}}
mydoc = mycol.find(myquery)
for x in mydoc:
    print(x)
    
沒有參數或參數爲空字典表示查詢所有的
for x in mycol.find():
    print(x)

#第二個參數爲字段設置0或1,表示查詢結果是否顯示這個字段
for x in mycol.find({},{"_id":0}):
    print(x)
#但是除了_id以外,其他設置的字段不能同時指定0和1
for x in mycol.find({},{"name":0,"age":1}):	#報錯
    print(x)

關於查詢條件中的那些符號果然還是有大佬已經整理出來了呀:其他高級查詢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章