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