09数据库补充
以前学Java的时候有记录过相关内容,所以本篇只对MySQL进行一些补充。
一. 在python里边操作MySQL
1) 引入模块
from pymysql import *
2) 创建Connection对象
- 用于建立与数据库的连接
- 创建对象:调用connect()方法
conn=connect(host='localhost',port=3306,user='root',password='xxx',database='xxx',charset='utf8')
其中port是数字类型,不需要单引号括起来
- 对象的方法
- close()关闭连接
- commit()提交
- cursor()返回Cursor对象,用于执行sql语句并获得结果
3) Cursor对象
- 用于执行sql语句,使用频度最高的语句为select、insert、update、delete
- 获取Cursor对象:调用Connection对象的cursor()方法
cursor = conn.cursor()
- 对象的方法
- close()关闭
- execute(operation [, parameters ])执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句
- fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组
- fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
- 对象的属性
- rowcount只读属性,表示最近一次execute()执行后受影响的行数
- connection获得当前连接对象
4) 关闭conn,cursor对象
使用之后记得关闭
cursor.close()
conn.close()
二. 参数化防止sql注入
1) sql语句的参数化,可以有效防止sql注入
2) 此处不同于python的字符串格式化,全部使用%s占位
find_name = input("请输入物品名称:") params = [find_name] # 执行select语句,并返回受影响的行数:查询所有数据 count = cs1.execute('select * from goods where name=%s', params)
三. 视图
1.基本概念
1)通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
2)视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);
3) 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
2. 操作视图
1)创建视图
create view 视图名称 as select语句;
2)查看视图
show tables;
3)使用视图,它只有查询功能
select * from v_stu_score;
4)删除
drop view 视图名称;
3. 视图的作用
1)提高了重用性,就像一个函数
2)对数据库重构,却不影响程序的运行
3)提高了安全性能,可以对不同的用户
4)让数据更加清晰
二.索引
1)索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
2)目的:提高查询效率
3)使用
- 查看索引
show index from 表名;
- 创建索引
- 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
- 字段类型如果不是字符串,可以不填写长度部分
- create index 索引名称 on 表名(字段名称(长度))
- 删除索引:
drop index 索引名称 on 表名;
4) 数据库中的主键、外键也使用了索引
5) 注意:
建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。建立索引会占用磁盘空间