Python ? day 13

Python學習筆記之 MongoDB數據庫 & Redis數據庫

系統說明:windows
一、操作MongoDB數據庫
1、創建數據庫
    語法:use 數據庫名
    注意:如果數據庫不存在則創建數據庫,否則切換到指定的數據庫
    注意:如果剛剛創建的數據庫不在列表內,如果要顯示它,我們需要向剛剛創建的數據庫中插入一些數據(  db.student.insert({name:"tom",age:18,gender:1,address:"北京",isDelete:0})  )
2、刪除數據庫
    前提:使用當前數據庫(use 數據庫名)
    db.dropDatabase()
3、查看所有數據庫
    語法:show dbs
4、查看當前正在使用的數據庫
    a、db
    b、db.getName()
5、斷開連接
    exit
6、查看命令幫助
    help
二、集合操作
1、查看當前數據庫下有哪些集合
    show collections
2、創建集合
    a、
        語法:db.createCollection("集合名")
        示例:db.createCollection("class")
    b、
        語法:db.集合名.insert(文檔)
        示例:db.student.insert({name:"tom",age:18,gender:1,address:"北京",isDelete:0}) 
        
    區別:兩者的區別在于前者創建的是一個空的集合,后者創建的一個空的集合并添加一個文檔
3、刪除當前數據庫中的集合
    語法:db.集合名.drop()
    示例:db.class.drop()
三、文檔操作
1、插入文檔
    a、使用insert()方法插入文檔
        插入一個:
            語法:db.集合名.insert(文檔)
            示例:db.student.insert({name:"李雷",age:22,gender:1,address:"南江",isDelete:0}) 
        插入多個:
            語法:db.集合名.insert([文檔1,文檔2,……,文檔n])
            示例:db.student.insert([{name:"李雷",age:22,gender:1,address:"南江",isDelete:0},{name:"cc",age:22,gender:1,address:"天津",isDelete:0},{name:"小姐姐",age:22,gender:1,address:"成都",isDelete:0}])
    b、使用save()方法插入文檔
        語法:db.集合名.save(文檔)
        說明:如果不指定_id字段,save()方法類似于insert()方法。如果指定_id字段,則會更新_id字段的數據
        示例1:db.student.insert({name:"張三",age:21,gender:1,address:"上海",isDelete:0})
        示例2:db.student.insert({_id:ObjectId("5b0a2360864a739fd6c0af16"),name:"tom",age:22,gender:1,address:"上海",isDelete:0})
    
2、文檔更新
    a、update()方法用于更新已存在的文檔
        語法:
            db.集合名.update(
                query,
                update,
                {
                    upset:<boolean>,
                    multi:<boolean>,
                    writeConcern:<document>
                }
            )
        參數說明:
            query:update的查詢條件,類似于sql里update內的where后面的內容
            update:update的對象和一些更新的操作符($set,$inc)等,$set直接更新,$inc在 原有的基礎上累加后更新
            upset:可選,如果不存在update的記錄,是否當新數據插入,true為插入,False為不插入,默認為false
            multi:可選,mongodb默認是false,只更新找到的第一條記錄,如果這個參數為true,就按照條件查找出來的數據全部更新
            writeConcern:可選,拋出異常的級別
            
        需求:將tom的年齡更新為25 
        示例:
            db.student.update({name:"tom"},{$set:{age:25}})
            累加:db.student.update({name:"tom"},{$inc:{age:25}})  
            全改:db.student.update({name:"李雷"},{$set:{age:30}},{multi:true})
        
    b、save()方法用于通過傳入的文檔替換已有文檔
        語法:
            db.集合名.save(
                document,
                {
                    writeConcern:<document>
                }
            )
        參數說明:
            document:文檔數據
            writeConcern:可選,拋出異常的級別
    
3、文檔刪除
    說明:在執行remove()函數前,先執行find()命令來判斷執行的條件是否存在是一個良好的習慣
    
    語法: 
        db.集合名.remove(
            query,
            {
                justOne:<boolean>,
                writeConcern:<document>
            }
        )
    參數說明:
        query:可選,刪除文檔的條件
        justOne:可選,如果true為1,則只刪除一個文檔
        writeConcern:可選,拋出異常的級別
    示例:db.student.remove({name:"李雷"})
        
4、文檔查詢
    a、find()方法
        語法:db.集合名.find()
        查詢集合下所有的文檔(數據):db.student.find()
        
    b、find()方法查詢指定列
        語法:db.集合名.find(
            query,
            {
                <key>:1,
                <key>:1
            }
        )
        參數說明:
            query:查詢條件
            key:要顯示的字段,1表示顯示
        示例:
            db.student.find({gender:1},{name:1,age:1})
            db.student.find({},{name:1,age:1})
            
    c、pretty()方法以格式化的方式來顯示文檔
        示例:db.student.find().pretty()
        
    d、findOne()方法查詢匹配結果的第一條數據
        示例:db.student.findOne({gender:0})
            
5、查詢條件操作符
    作用:條件操作符用于比較兩個表達式并從MongoDB集合中獲取數據
        a、大于                    -   $gt
            語法:db.集合名.find({<key>:{$gt:<value>}})
            示例:db.student.find({age:{$gt:20}})
            
        b、大于等于              -   $gte
            語法:db.集合名.find({<key>:{$gte:<value>}})
            
        c、小于                    -   $lt
            語法:db.集合名.find({<key>:{$lt:<value>}})
            
        d、小于等于              -   $lte
            語法:db.集合名.find({<key>:{$lte:<value>}})
        
        e、大于等于和小于等于 -   $gte 和 $lte
            語法:db.集合名.find({key}:{$gte:<value>,$lte:<value>}})
            
        f、等于                    -   :
            語法:db.集合名.find({key}:<value>)
        
        g、使用_id進行查詢
            語法:db.集合名.find({"_id":ObjectId("id值")})
            示例:db.student.find({"_id":ObjectId("5b0a2360864a739fd6c0af16")})
            
        h、查詢某個結果集的數據條數
            db.student.find().count()
        
        i、查詢某個字段的值當中是否包含另一個值
            示例:db.student.find({name:/om/})
        
        j、查詢某個字段的值是否以另一個值開頭
            示例:db.student.find({name:/^to/})
    
6、條件查詢and 和 or
    a、AND條件
        語法:db.集合名.find({條件1,條件2,……,條件n})
        示例:db.student.find({gender:0,age:{$ge:16}})
        
    b、OR條件
        語句:
            db.集合名.find(
                {
                    $or:[{條件1},{條件2},{……},{條件n}]
                }
            )
        示例:db.student.find({$or:[{age:21},{age:22}]})
        
    c、AND和OR聯合使用
        語法:
            db.集合名.find(
                {
                    條件1,
                    條件2,
                    $or:[{條件3},{條件4}]
                }
            )
 
7、limit、 skip
    a、limit():讀取指定數量的數據記錄
        db.student.find().limit(2)
    b、skip():跳過指定數量的數據
        db.student.find().skip(3)
    c、skip和limit聯合使用
        通常用這種方式來實現分頁功能
        示例:db.student.find().skip(3).limit(2)
8、排序
    語法:db.集合名.find().sort({<key>:1|-1})
    示例:db.student.find().sort({age:1})
    注意:1表示升序,-1表示降序
Redis
redis類型操作
一、String
概述:
    String是redis最基本的類型,最大能存儲512MB的數據,String類型是二進制安全的,即可存儲任何數據、比如數字、圖片、序列化對象等
    
1、設置
    a、設置鍵值
        set key value 
    
    b、設置鍵值及過期時間
        setex key senconds value
        
    c、設置多個鍵值
        mset key value [key value ……]
        
2、獲取
    a、根據鍵獲取值,如果鍵不存在則返回None(null 0 nil)
        get key 
    b、根據多個鍵獲取多個值
        mget key [key ……]

3、運算
    要求:值是數字類型的字符串
    a、將key對應的值加1
        incr key 
    b、將key對應的值減1
        decr key 
    c、將key對應的值加整數
        incrby key intnum
    d、將key對應的值減整數
        decrby key intnum   
        
4、其它
    a、追加值
        append key value
    b、獲取值長度
        strlen key
二、key
1、查找鍵,參數支持正則
    keys pattern
    
2、判斷鍵是否存在,如果存在返回1,如果不存在返回0
    exists key

3、查看鍵對應的value的類型
    type key

4、刪除鍵及對應的值
    del key [key ……]

5、設置過期時間,以秒為單位
    expire key seconds

6、查看有效時間,以秒為單位
    ttl key
三、hash
概述:hash用于存儲對象的
{
    name:"tom",
    age:18
}
1、設置
    a、設置單個值
        hset key field value
    b、設置多個值
        hmset key field value [field value ……]
    
2、獲取
    a、獲取一個屬性的值
        hget key field
    b、獲取多個屬性的值
        hmget key field [field ……]
    c、獲取所有屬性和值
        hgetall key
    d、獲取所有的屬性
        hkeys key
    e、獲取所有值
        hvals key
    f、返回包含屬性的個數
        hlen key
    
3、其它
    a、判斷屬性是否存在,存在返回1,不存在返回0
        hexists key field
    b、刪除屬性及值
        hdel key field [field ……]
    c、返回值的字符串長度
        hstrlen key field
四、list
概述:列表的元素類型為string,按照插入的順序排序,在列表的頭部或尾部添加元素
1、設置
    a、在頭部插入
        lpush key value [value……]
    b、在尾部插入
        rpush key value [value……]
    c、在一個元素的前或后插入新元素
        linsert key before|after pivot value
    d、設置指定索引的元素值
        lset key index value
        注意:index從0開始
        注意:索引值可以是負數,表示偏移量是從list的尾部開始,如-1表示最后一個元素
2、獲取
    a、移除并返回key對應的list的第一個元素
        lpop key
    b、移除并返回key對應的list的最后一個元素
        rpop key
    c、返回存儲在key的列表中的指定范圍的元素
        lrange key start end
        注意:start end 都是從0開始
        注意:偏移量可以是負數
3、其它
    a、裁剪列表,改為元集合的一個子集
        ltrim key start end
        注意:start end 都是從0開始
        注意:偏移量可以是負數
    b、返回存儲在key里的list的長度
        llen key
    c、返回列表中索引對應的值
五、set
概述:無序集合,元素類型為string類型,元素具有唯一性,不重復
1、設置
    a、添加元素
        sadd key member [member ……]
2、獲取
    a、返回key集合中所有的元素
        smmbers key
    b、返回集合元素個數
        scard key
3、其它
    a、求多個集合的交集
        sinter key [key ……]
    b、求多個集合的差集
        sdiff key [key ……]
    c、求多個集合的合集
        sunion key [key ……]
    d、判斷元素是否在集合中,存在返回1,不存在返回0
        sismember key member
六、zset
概述:
    a、有序集合,元素類型為string,元素具有唯一性,不能重復
    b、每個元素都會關聯一個double類型的score(表示權重),通過權重的大小排序,元素的score可以相同
1、設置
    a、添加
        zadd key score member [score member ……]
        zadd z1 1 a 5 b 3 c 2 d 4 e
2、獲取
    a、返回指定范圍的元素
        zrange key start end
    b、返回元素個數
        zcard key
    c、返回有序集合key中,score在min和max之間的元素的個數
        zcount key min max
    d、返回有序集合key中,成員member和score值
        zscore key member 
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容