非關係型數據庫
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)
關於查詢條件中的那些符號果然還是有大佬已經整理出來了呀:其他高級查詢