Python操作redis和mongoDB的方法
一、操作redis
redis是一個(gè)key-value存儲系統(tǒng),value的類型包括string(字符串),list(鏈表),set(集合),zset(有序集合),hash(哈希類型)。為了保證效率,數(shù)據(jù)都是緩沖在內(nèi)存中,在處理大規(guī)模數(shù)據(jù)讀寫的場景下運(yùn)用比較多。
備注:默認(rèn)redis有16個(gè)數(shù)據(jù)庫,即db0~db15, 一般存取數(shù)據(jù)如果不指定庫的話,默認(rèn)都是存在db0中。
resid提供2種連接方式:直接連接、連接池連接
1、直接連接示例:
import redis # pip3 install redis
# 創(chuàng)建redis連接對象
def init_redis():
redis_config = {
"host": "172.29.0.17",
"port": 6379
}
global Redis_Conn
Redis_Conn = redis.Redis(**redis_config)
# Redis_Conn = redis.Redis(host='172.29.0.17', port=6379, db=1) # 指定數(shù)據(jù)庫
# 插入值,Value為str類型為例
def insert_redis_key_value(key,value):
Redis_Conn.set("name","Zhu")
# 獲取值,Value為str類型為例
def get_redis_key_value(key):
global Redis_Conn
print("redis key value: %s" % Redis_Conn.get(key))
連接池的原理是, 通過預(yù)先創(chuàng)建多個(gè)連接, 當(dāng)進(jìn)行redis操作時(shí), 直接獲取已經(jīng)創(chuàng)建的連接進(jìn)行操作, 而且操作完成后, 不會釋放, 用于后續(xù)的其他redis操作,這樣就達(dá)到了避免頻繁的redis連接創(chuàng)建和釋放的目的, 從而提高性能。
redis模塊采用ConnectionPool來管理對redis server的所有連接。
2、連接池連接示例:
import redis
pool = redis.ConnectionPool(host='172.29.0.17', port=6379,db=1)
red = redis.Redis(connection_pool=pool)
red.set('key1', 'value1')
red.set('key2', 'value2')
二、操作mongoDB
1、mongoDB 是一個(gè)非關(guān)系型數(shù)據(jù)庫(NoSQL),介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品。擁有很多優(yōu)秀特性,例如高性能、高可用、支持豐富的查詢語句、無需預(yù)定義數(shù)據(jù)模型和水平可伸縮等。
2、mongoDB是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。
3、mongoDB最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。
4、mongoDB 的適用場景為:數(shù)據(jù)不是特別重要(例如通知,推送)、數(shù)據(jù)表結(jié)構(gòu)變化較為頻繁、數(shù)據(jù)量特別大、數(shù)據(jù)的并發(fā)性特別高、數(shù)據(jù)結(jié)構(gòu)比較特別(例如地圖的位置坐標(biāo)),
這些情況下用 mongoDB , 其他情況就還是用MySQL ,這樣組合使用就可以達(dá)到最大的效率。
import pymongo # pip3 install pymongo
# 創(chuàng)建mongo連接對象
def init_mongo():
global Mongo_Conn
Mongo_Conn = pymongo.MongoClient(host="172.29.0.14", port=27017)
admin = Mongo_Conn.admin
admin.authenticate('root', '')
# 數(shù)據(jù)操作
def get_mongo_key_value(token_id):
db = Mongo_Conn['device_center'] # 創(chuàng)建數(shù)據(jù)庫"device_center",命名為"db"
col = db['token_info'] # 創(chuàng)建集合"token_info",命名為"col"
mydict = {"name": "Zhuyu", "alexa": "160", "sex": "male"}
col.insert_one(mydict) # 插入一條數(shù)據(jù)
mylist = [
{"name": "ating", "alexa": "168", "sex": "male"},
{"name": "Liang", "alexa": "165", "sex": "female"},
{"name": "Libai", "alexa": "156", "sex": "female"}
]
col.insert_one(mylist) # 插入一組數(shù)據(jù)
query1 = col.find_one() # 查詢一條數(shù)據(jù)
query2 = col.find({},{"alexa": 1}) # 查詢指定字段的數(shù)據(jù)
query3 = col.find() # 查詢集合中的所有數(shù)據(jù)
query4 = col.find({"name": "ating"}) # 根據(jù)指定條件查詢
myquery1 = { "alexa": "160" }
newvalues1 = { "$set": { "alexa": "161" } }
col.update_one(myquery1, newvalues1) # 修改匹配到的第一條記錄
myquery2 = { "name": { "$regex": "^L" } }
newvalues2 = { "$set": { "alexa": "123" } }
col.update_many(myquery2, newvalues2) # 修改所有匹配到的記錄,將查找所有以 L 開頭的 name 字段,并將匹配到所有記錄的 alexa 字段修改為 123
query5 = col.find().sort("alexa") # sort() 方法第一個(gè)參數(shù)為要排序的字段,第二個(gè)字段指定排序規(guī)則,1 為升序,-1 為降序,默認(rèn)為升序
for x in query5 :
print(x)
# 結(jié)果
{"name": "Libai", "alexa": "156", "sex": "female"}
{"name": "Zhuyu", "alexa": "160", "sex": "male"}
{"name": "Liang", "alexa": "165", "sex": "female"}
{"name": "ating", "alexa": "168", "sex": "male"}
query6 = col.find().sort("alexa",-1) # 降序
for x in query6:
print(x)
# 結(jié)果
{"name": "ating", "alexa": "168", "sex": "male"}
{"name": "Liang", "alexa": "165", "sex": "female"}
{"name": "Zhuyu", "alexa": "160", "sex": "male"}
{"name": "Libai", "alexa": "156", "sex": "female"}
myquery3 = { "name": "Libai" } # 刪除一條數(shù)據(jù)
mycol.delete_one(myquery3)
myquery4 = { "name": {"$regex": "^L"} } # 刪除多個(gè)數(shù)據(jù)
x1 = mycol.delete_many(myquery4)
print(x1.deleted_count, "個(gè)文檔已刪除") # 2個(gè)文檔已刪除
x2 = mycol.delete_many({}) # 刪除集合中的所有數(shù)據(jù)
print(x2.deleted_count, "個(gè)文檔已刪除") # 4個(gè)文檔已刪除
# 斷開mongo連接
def disconnect_mongo():
Mongo_Conn.disconnect()
總結(jié)
以上所述是小編給大家介紹的Python操作redis和mongoDB的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
python?selenium實(shí)現(xiàn)登錄豆瓣示例詳解
大家好,本篇文章主要講的是python?selenium登錄豆瓣示例詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01
使用70行Python代碼實(shí)現(xiàn)一個(gè)遞歸下降解析器的教程
這篇文章主要介紹了使用70行Python代碼實(shí)現(xiàn)一個(gè)遞歸下降解析器的教程,文章分步講解最后整合出代碼,需要的朋友可以參考下2015-04-04
Python使用pickle模塊報(bào)錯(cuò)EOFError Ran out of input的解決方法
這篇文章主要介紹了Python使用pickle模塊報(bào)錯(cuò)EOFError Ran out of input的解決方法,涉及Python異常捕獲操作處理相關(guān)使用技巧,需要的朋友可以參考下2018-08-08
詳解python requests中的post請求的參數(shù)問題
這篇文章主要介紹了詳解python requests中的post請求的參數(shù)問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Django models.py應(yīng)用實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Django models.py應(yīng)用實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
python線程池 ThreadPoolExecutor 的用法示例
這篇文章主要介紹了python線程池 ThreadPoolExecutor 的用法示例,幫助大家更好得理解和使用python線程池,感興趣的朋友可以了解下2020-10-10

