python操作数据库
一,python操作MySQL
1.PyMySQL介绍
是一个纯python的MySQL客户端库。它大多数API都兼容了mysqlclient
, MySQLdb
-
支持:
python 2.7 ,3.5+
MySQL server 5.5 +
-
安装:
pip install PyMySQL
连接前的准备工作:
设置端口映射 mysql服务默认监听3306
设置虚拟机3306端口映射物理机的3306端口 (这个决定了你能否在物理机连上你的mysql)
2.简单使用
import pymysql
# 套路,步骤
# 1. 创建连接
conn = pymysql.connect(
host='127.0.0.1', # 主机
port=3306, # 端口
user='develop', # 用户名
password='QWEqwe123', # 密码
db='tz', # 数据库
charset='utf8' # 字符编码
)
# 2. 创建游标
# 通过指定cursor的构造类,返回字典形式的结果
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 3. 执行sql语句
cursor.execute('select name as aa from student')
# 4.获取结果
res = cursor.fetchall()
print(res)
# 5.关闭游标
cursor.close()
# 6.关闭连接
conn.close()
3.使用pymysql进行查询
# 4.获取结果
res1 = cursor.fetchone() # 获取一条 返回的是 一条数据 字典,元组
print('获取一条')
print(res1)
res2 = cursor.fetchmany(3) # 获取多条 返回的是 多条数据 列表
print('获取三条')
print(res2)
res = cursor.fetchall() # 获取多条
print('获取剩下所有的')
print(res)
res3 = cursor.fetchone() # cursor 中的数据流,只能被读一次
print(res3)
4.使用pymysql进行增删改
import pymysql
# 套路,步骤
# 1. 创建连接
conn = pymysql.connect(
host='127.0.0.1', # 主机
port=3306, # 端口
user='develop', # 用户名
password='QWEqwe123', # 密码
db='tz', # 数据库
charset='utf8', # 字符编码
cursorclass=pymysql.cursors.DictCursor
)
# 2. 创建游标
# 通过指定cursor的构造类,返回字典形式的结果
# pymysql 默认支持事务
try:
with conn.cursor() as cursor:
# 3.构建 sql语句 动态
from_name = input('请输入转账账户名>>>>:')
to_name = input('请输入转入账户名>>>>:')
money = int(input('请输入转账金额>>>>>:'))
# 直接拼接的方法不推荐,会发生sql注入
sql1 = 'update account set money=money-%s where name=%s'
sql2 = 'update account set money=money+%s where name=%s'
# 4.执行sql语句
cursor.execute(sql1, args=(money, from_name))
cursor.execute(sql2, args=(money, to_name))
# 5. 提交事务
conn.commit()
except Exception as e:
# 有异常
print(e)
# 6.处理异常,并回滚
conn.rollback() # 回滚
finally:
# 7. 关闭连接
conn.close()
二,python操作redis
1.redis-py介绍
redis-py是键值数据库redis的python实现接口。
两个大版本,2.x, 3.0 3.0有很多新特效,使用的时候需要做兼容处理
-
支持:
3.0:
- python2.7,python3.4+
-
安装
pip install redis
不要
sudo
安装,推荐安装在virtualenv
连接前的准备工作:
-
设置端口映射 redis服务默认监听6379
设置虚拟机6379端口映射物理机的6379端口 (这个决定了你能否在物理机连上你的redis)
###2.redis-py 操作redis
python 操作redis的命令和命令行几乎一致,除了del
,因为和关键字重名,用delete代替。
import redis
# 套路
# 1.建立连接
# conn = redis.Redis(
# host='127.0.0.1', # localhost
# port=6379,
# db=0
# )
conn = redis.StrictRedis( # 兼容旧版本(推荐使用)
host='127.0.0.1', # localhost
port=6379,
db=0,
decode_responses=True # 设置为True返回的数据格式就是str类型
)
# key 的操作
res = conn.keys('*') #查看所有的key
print(conn.delete('key')) #此因为del关键字冲突所以使用delete
print(coon.exists('key')) #检查是否存在 存在返回1,不存在返回0
coon.rename('oldkey', 'newkey') #改名
coon.expire ('key', seconds) #设置过期时间
coon.ttl ('key') #查看过期时间 不存在返回 -2,永久存在返回-1,否则返回整数秒
coon.persist ('key') #移除过期时间
五大数据类型
- 字符串(string)
coon.set ('key', 'value')#设置数据'value') 没有key就添加,有key就修改
coon.get('key') #查看
append('key', 'value') #追加,追加到原有的数据后面,字符串的拼接
-
哈希表(hash)
coon.hmset('hhhh', a_list) #添加新数据,一次性添加多值, 没有就创建,有就修改,a_list为一个字典 coon.hget('key', 'field') #查看hash表中某个字段的值 coon.hgetall('key') #查询hash表中所有的字段和值 coon.hvals('hhhh') #查看所有的value coon.hkeys('hhhh') #查看所有的field coon.hdel('hhhh', 'name') #删除某个字段 coon.del('key') #删除整个hash表
-
列表(list)
#添加数据 coon.lpush('key', value) #头部添加(左边)value为一个字典 coon.rpush('key', value) #尾部添加(右边)value为一个字典 #查看数据 coon.lrange('key', 0, -1) #查看数据:lrange key start end 获取列表指定范围的元素,包含start,和end,start从0开始 coon.lindex('key', index(索引)) #查看指定索引数据 coon.lset('key', index(索引),value) #修改指定索引数据 #删除 coon.lpop('key') #左删除 coon.rpop('key') #右删除 coon.llen('key') #获取列表长度:coon.llen('key')
-
集合(set)
coon.sadd('key', member) #添加数据,key存在则修改,不存在则创建member为一个字典 coon.smemebers('key') #查询所有成员 coon.srem('key', member) #指定删除,移除key中的一个或多个元素 coon.spop('key') #随机删除
-
有序集合(sorted set)
有序集合和集合一样也是string类型元素的集合,且不允许重复成员
不同的是每个元素都会关联一个double类型的score。redis正是通过score来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但是score却是可以重复的。score可以是整数,也可以是双精度的小数
a_list = {score:member............} a_list = { 1:5, 2:55, 3:56, } coon.zadd('key', a_list)#添加数据,将一个或者多个元组及其值加入到有序集合,key不存在则创建,a_list为一个字典 coon.zrange('key', star, stop) #通过索引查看 coon.zrangebyscore('key', 5, 56) #通过score查看,返回指定区socre间的集合元素 coon.zscore('key',member) #返回成员的score coon.zcard('key') #返回集合长度 coon.zrem('key', member [member1 ...]) #指定删除 coon.zremrangebyrank('key', start stop) #通过索引删,移除有序集合key中,区间为索引start到stop的,包含start和stop在内。 coon.zremrangebyscore('key', max min) #通过score删,移除有序集合key中,区间为score, min到max的的值,包含min和max在内
3.piplines
管道是redis类的子类, 它支持在一个请求中缓冲多个命令到服务器
pipe = conn.pipeline() #创建一个管道
pipe.keys('*')
pipe.set('name', '源氏') #缓存了两条命令
res = pipe.execute() #执行命令
print(res[0])
print(res[1]) #命令执行的结果