主题
pymysql + redis
一、mysql补充
1. 自关联查询
python
# 自关联查询 自己关联自己
select *
from first_db.areas p
join first_db.areas c on p.id = c.pid
join first_db.areas d on c.id = d.pid;2. 子查询
python
# 子查询
# 用在from后
select *
from (select *
from first_db.products
where price > 1000) as p
where p.stock > 80;
# 用在where后
select *
from first_db.products
where price > (select avg(price) from first_db.products);
# 用在select后
select product_name, price - (select avg(price) from first_db.products) as 与平均价格差
from first_db.products;二、pymysql
python
# 导入pymysql
import pymysql
# 建立连接
conn = pymysql.connect(
# ip+端口
host='192.168.88.161',
port=3306,
# 用户名+密码
user='root',
password='your-mysql-password',
)
# 创建游标(通过链接对象创建)
cursor = conn.cursor()
# 执行SQL语句(通过游标执行)
res = cursor.execute("""
# sql语句
# 解决sql注入数据问题
# 1.使用%书写sql语句
# 2.用列表传入参数填充%
"select * from second_db.users where username = %s and password = %s ", [username, password]
# 确认
conn.commit()
# 回滚到上一次commit
conn.rollback()
""")
# 查看受影响行数(不是具体行数)
print(res)
# 查看结果
# 单条查询(元组)
# cursor.fetchone()
# 全部结果(二维元组)
# cursor.fetchall()
# 关闭游标
cursor.close()
# 关闭连接对象
conn.close()三、redis
1. 基本使用
python
# 导入radis
import redis
# 创建连接
r = redis.Redis(
# ip + 端口(有默认可以不传)
host='127.0.0.1',
port=6379,
# 库 + 密码(空)(有默认,可以不传)
db=0,
password=None,
# 自动解码
decode_responses=True
)
# 测试链接
try:
res = r.ping()
print(f'连接成功{res}')
except Exception as e:
print(f'连接失败{e}')
# 关闭连接
r.close()2. API
1. 字符串
python
# 设置单个值
# r.set(键,值)
# 取出值
# r.get(键)
# 设置多个值
# r.mset({键1:值1, 键2:值2, 键3:值3})
# 取出多个值
# r.mget([键1, 键2, 键3])
# 设置值和设置过期时间(过期后数据自动删除)
# r.setex('键',时间(秒), '值')2. 数值
python
# 自增1
r.incr()
# 自减1
r.decr()
# 自增n
r.incrby('键',数量)
# 自减n
r.decrby('键',数量)3. 哈希
python
# 给redis的键设置一个字典类型的值 r.hset('redis的键','值得键','值得值')
# 获取字典某个键的值 r.hget('redis的键','值得键')
# 获取redis某个字典的所有键值对 r.hgetall('redis的键')
# redis的键设置多个键值对 r.hmset('redis的键',{键1:值1,键2:值2})
# 获取redis的键的多个键值对 r.hmget('redis的键',[键1,键2])
# 获取redis的键对应字典的所有键 r.hkeys('redis的键')
# 获取redis的键对应字典的所有值 r.hvals('redis的键')
# 删除redis的键对应字典的属性(可以删多个)
# r.hdel('redis的键', '键1', '键2')4. 列表
python
# 左侧添加元素 r.lpush(键,值)
# 右侧添加元素 r.lpush(键,值)
# 查看列表 r.lrange(键,起始索引,结束索引) 包头包尾
# 左侧弹出元素 r.lpop(键)
# 右侧弹出元素 r.rpop(键)
# 获取列表长度 r.llen(键)5. 集合
python
# 添加元素 r.sadd('键','值')
# 查看集合元素 r.smembers('键')
# 判断元素是否存在 r.sismember('键','值') 存在返回1,不存在返回0
# 获取集合元素的长度 r.scard('键')
# 随机弹出一个元素 r.spop('键')
# 指定移除一个元素 r.srem('键','值')
# 获取两个集合的交集 r.sinter(['键1','键2'])
# 获取两个集合的并集 r.sunion(['键1','键2'])
# 获取两个集合的差集 r.sdiff(['键1','键2']) (前减后)6.有序集合
python
# 有序集合 r.zadd('键',{'键':'值'})
# 按照分数升序排列 r.zrange('键',0,-1, withscores=True)
# 按照分数降序排列 r.zrevrange('键',0,-1, withscores=True)
# 获取指定元素的分数 r.zscore(redis的'键','键')
# 增加(减少)指定元素的分数 r.zincrby(redis的'键',增加的分数,'键')
# 获取排名 r.zrank(redis的'键','键') 索引
# 获取范围内的元素 r.zrangebyscore(redis的'键',最小值,最大值,withscores = True)