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:,
multi:,
writeConcern:
}
)
参数说明:
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:文档数据
writeConcern:可选,抛出异常的级别
3、文档删除
说明:在执行remove()函数前,先执行find()命令来判断执行的条件是否存在是一个良好的习惯
语法:
db.集合名.remove(
query,
{
justOne:,
writeConcern:
}
)
参数说明:
query:可选,删除文档的条件
justOne:可选,如果true为1,则只删除一个文档
writeConcern:可选,抛出异常的级别
示例:db.student.remove({name:"李雷"})
4、文档查询
a、find()方法
语法:db.集合名.find()
查询集合下所有的文档(数据):db.student.find()
b、find()方法查询指定列
语法:db.集合名.find(
query,
{
:1,
: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({:{$gt:}})
示例:db.student.find({age:{$gt:20}})
b、大于等于 - $gte
语法:db.集合名.find({:{$gte:}})
c、小于 - $lt
语法:db.集合名.find({:{$lt:}})
d、小于等于 - $lte
语法:db.集合名.find({:{$lte:}})
e、大于等于和小于等于 - $gte 和 $lte
语法:db.集合名.find({key}:{$gte:,$lte:}})
f、等于 - :
语法:db.集合名.find({key}:)
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({: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