今天继续MySQL,今天的主要内容有,Python和MySQL的交互,MySQL的视图,事务以及索引。
需要首先下载安装DB API模块
python2: sudo pip install mysqlbd
python3: sudo pip install pymysql
from pymysql import *
def update(inputvalue):
"""
增加, 修改, 删除、
注意: 在python中操作数据库的时候, 所有的更新数据的操作不会立即提交到数据库中, 提供了一次可以撤销的操作
如果是数据的更新操作, 等待数据更新成功之后应该 提交数据, 如果失败应该撤销之前的操作
host=None, user=None, password="",
database=None, port=0, unix_socket=None,
charset=''
:return:
"""
# 1. 创建和数据库的链接
conn = connect(host='localhost',
user='root',
password='mysql',
database='jing_dong',
port=3306,
charset='utf8')
# 2. 获取一个数据库操作对象, 类型是cursor 游标类型
cursor = conn.cursor()
# 3. 编写一条sql语句 goods_cates
# sql = """insert into goods_cates (name) values ('洗衣机')"""
# sql = """update goods_cates set name = '电视机' where id = 12;"""
sql = 'delete from goods_cates where id = %s'
# 4. 交给cursor类型的对象来完成sql的执行操作
ret = cursor.execute(sql, [inputvalue])
print(ret)
# 4.1 如果是数据的更新操作, 应该判断数据是否更新成功, 成功就提交数据, 失败就数据回滚(rollback)
if ret != 0:
conn.commit()
else:
conn.rollback()
# 5. 关闭连接 , 关闭cursor对象
cursor.close()
conn.close()
def select(idstr):
"""
查询
:return:
"""
# 1. 创建和数据库的链接
conn = connect(host='localhost',
user='root',
password='mysql',
database='jing_dong',
port=3306,
charset='utf8')
# 2. 获取一个数据库操作对象, 类型是cursor 游标类型
cursor = conn.cursor()
# 3. 编写一条sql语句 goods_cates
sql = 'select * from goods_cates where id = %s' % idstr
# 4. 交给cursor类型的对象来完成sql的执行操作
# fetchone注意: 如果有数据的情况下返回的数据类型: 元祖, 没有数据: None
ret = cursor.execute(sql)
print(ret)
ret = cursor.fetchone()
print(ret)
# fetchall()
# fetchall 没有数据的情况下返回的是一个空元祖, 有数据: 嵌套的元祖
ret = cursor.fetchall()
print(ret)
# 4.1 如果是数据的更新操作, 应该判断数据是否更新成功, 成功就提交数据, 失败就数据回滚(rollback)
# 查询不是数据更新操作 不需要commit
# conn.commit()
# 5. 关闭连接 , 关闭cursor对象
cursor.close()
conn.close()
应用场景
代码实现
-- 定义视图
create view v_goods as select * from goods;
-- 查看视图
show tables;
-- 使用视图
select * from v_goods;
# 开启事务
begin;或者 start transaction;
# 执行事务
select balance from checking where customer_id = 10233276;
update checking set balance = balance - 200.00 where customer_id = 10233276;
update savings set balance = balance + 200.00 where customer_id = 10233276;
# 提交事务
commit;
# 如果需要撤销
rollback;
-- 查看索引
show index from goods;
-- 创建索引
-- 如果创建索引的字段是字符串需要指定索引的长度, 如果是数字就不需要
create index 索引名称 on 表名(字段名称(长度))
-- 删除索引
drop index 索引名称 on 表名;
-- 案例 查询大量的数据, 在没有使用索引和使用索引之后的情况下来对比查询的时间
0. 创建表
create table test_index(id int unsigned primary key auto_increment,title varchar(11));
1. 构建大量的假数据 100w
2. 通过主键查询一条数据, 查看消耗时间
select * from test_index where id = 1000000;
3. 通过非主键字段查询, 获取查看时间
select * from test_index where title = 'ha-999999';
4. 给非主键字典创建索引, 在查询一下, 获取查看时间
create index title_index on test_index(title(11));
5. 对比时间
set profiling=1; 开启时间检测, 以后所有的sql语句执行的耗时都会被记录下来
show profiles;
--索引不是越多越好, 需要给合适的字段添加索引, 等到数据达到一定级别再添加索引
-- 1. 增加磁盘的开销
-- 2. 会导致数据更新的速度变慢