数据库——python操作MySQL、修改表SQL语句、视图、触发器、存储过程、事务、流程控制、常见函数、索引
文章目录
- 一、python操作MySQL
- 1.pymysql模块
- 1.基本使用
- 2.sql注入问题
- 3.二次确认
- 二、修改表SQL语句
- 1.修改表的名字 rename
- 2.添加字段 add
- 3.修改字段
- 4.删除字段
- 5.临时修改SQL语句的结束符
- 三、视图
- 1.视图的概念
- 2.视图的作用
- 3.视图的创建
- 四、触发器
- 1.触发器概念
- 2.触发器作用
- 3.触发器种类
- 4.触发器创建
- 五、存储过程
- 1.创建
- 2.使用
- 六、事务
- 1.事务的概念
- 2.事务四大特性
- 3.事务的创建
- 七、流程控制
- 1.if判断
- 2.while循环
- 八、常见函数
- 1.移除指定字符
- 2.大小写转换
- 3.获取左右起始指定个数字符
- 4.返回读音相似值(对英文效果)
- 5.日期格式:date_format
- 九、索引
一、python操作MySQL
1.pymysql模块
通过pymysql模块可以使用python控制数据库。
python中支持操作MySQL的模块很多 其中最常见的当属’pymysql’
pymysql属于第三方模块:
需要先下载才能使用:
pip install pymysql
1.基本使用
import pymysql 首先导入模块
### 2.链接服务端conn_obj = pymysql.connect(host='127.0.0.1', # MySQL服务端的IP地址port=3306, # MySQL默认PORT地址(端口号)user='root', # 用户名password='jason123', # 密码 也可以简写 passwddatabase='jp04_3', # 库名称 也可以简写 dbcharset='utf8' # 字符编码 千万不要加杠utf-8) # 要善于查看源码获取信息# 2.产生获取命令的游标对象cursor = conn_obj.cursor(cursor=pymysql.cursors.DictCursor) # 括号内不写参数 数据是元组要元组 不够精确 添加参数则会将数据处理成字典# 3.编写SQL语句# sql1 = 'show tables;'sql1 = 'select * from teacher;' # SQL语句会被高亮显示 不用惊慌# sql1 = 'select * from score;' # SQL语句会被高亮显示 不用惊慌# 4.执行SQL语句affect_rows = cursor.execute(sql1)print(affect_rows) # 执行SQL语句之后受影响的行数# 5.获取结果res = cursor.fetchall()print(res)'''补充说明'''
获取SQL语句执行的结果 跟读取文件内容的read方法几乎一致(光标)fetchone() fetchmany()fetchall()cursor.scroll(1, 'relative') # 相对于当前位置往后移动一个单位cursor.scroll(1, 'absolute') # 相对于起始位置往后移动一个单位
2.sql注入问题
sql注入问题就是利用mysql注释以及逻辑判断强行改变mysql语句的作用。
eg:
select_sql = “select username,password from user where username = %s and password = %s;”(username,password)
如果用户输入的字符中附带了 or 1=1、# 等可以修改mysql语句的符号会直接导致,数据库的运行逻辑偏离设计时的目的。
这时可以使用execute方法
execute(sql语句,参数1…参数n)
通过execute方法可以过滤调用用户中的特殊符号。
3.二次确认
在pymysql中操作数据库后是默认需要提交才能保存对数据库的增删改。
方式1:代码直接编写
affect_row = cursor.execute(sql)
conn_obj.commit() # 手动二次确认
方式2:配置固定参数
conn_obj = pymysql.connect(
autocommit=True # 自动二次确认
)
二、修改表SQL语句
1.修改表的名字 rename
alter table t1 rename ttt;
2.添加字段 add
alter table ttt add pwd int; '''默认是尾部追加字段'''
alter table ttt add tid int after name; '''指定追加位置'''
alter table ttt add nid int first; ‘’‘指定头部添加字段’‘’
3.修改字段
change(名字类型都可)/modify(只能改类型不能改名字):
alter table ttt change pwd password tinyint;
4.删除字段
drop:
alter table ttt drop nid;
5.临时修改SQL语句的结束符
delimiter $$
三、视图
1.视图的概念
通过SQL语句的执行得到的一张虚拟表 保存下来之后就称之为'视图'
2.视图的作用
- 如果需要频繁的使用一张虚拟表 可以考虑制作成视图 降低操作难度
- 视图虽然看似很好用 但是会造成表的混乱 毕竟视图不是真正的数据源
- 视图只能用于数据的查询 不能做增、删、改的操作 可能会影响原始数据(视图里面的数据是直接来源于原始表 而不是拷贝一份)
3.视图的创建
create view 视图名 as sql语句
四、触发器
1.触发器概念
在对表数据进行增、删、改的具体操作下,自动触发的功能
2.触发器作用
专门针对表数据的操作 定制个性化配套功能
3.触发器种类
表数据新增之前、新增之后
表数据修改之前、修改之后
表数据删除之前、删除之后
4.触发器创建
语法:
create trigger 触发器名字 before/after insert/update/delete
on 表名 for each row
begin
SQL语句
end
触发器的名字一般情况下建议采用下列布局形式
tri_after_insert_t1
tri_before_update_t2
tri_before_delete_t3
五、存储过程
存储过程中可以将多个sql语句组合起来,可以使用in创建接收变量,out创建返回变量
1.创建
语法:
类型1:不带参数
delimiter $ $
create procedure p1()
begin
sql语句
end $ $
delimiter ;
类型2:带参数
delimiter $ $
create procedure p1(in a int, out b int)
begin
select num as b from t1 where id = a;
end $ $
delimiter ;
2.使用
call 存储过程名
如果有in的变量需要在存储过程名后的()中写入。
eg:
call p1(1,2)
有out的需要先定义在用来接收返回
set @res; 定义
call p1(@res)
select @res 查看
查看存储过程具体信息
show create procedure pro1;
查看所有存储过程
show procedure status;
删除存储过程
drop procedure pro1;
六、事务
1.事务的概念
事务可以包含诸多SQL语句并且这些SQL语句
要么同时执行成功 要么同时执行失败 这是事务的原子性特点
2.事务四大特性
ACID
A:原子性
一个事务是一个不可分割的整体 里面的操作要么都成立要么都不成立
C:一致性
事务必须使数据库从一个一致性状态变到另外一个一致性状态
I:隔离性
并发编程中 多个事务之间是相互隔离的 不会彼此干扰
D:持久性
事务一旦提交 产生的结果应该是永久的 不可逆的
3.事务的创建
开启一个事务的操作
start transaction;
编写SQL语句(同属于一个事务)
update user set balance=90 where name=‘gg’;
update user set balance=10 where name=‘vv’;
update user set balance=1 where name=‘aa’;
事务回滚(返回执行事务操作之前的数据库状态)
rollback; # 执行完回滚之后 事务自动结束
事务确认(执行完事务的主动操作之后 确认无误之后 需要执行确认命令)
commit; # 执行完确认提交之后 无法回滚 事务自动结束
七、流程控制
1.if判断
if 条件 then子代码
elseif 条件 then子代码
else子代码
end if;
2.while循环
DECLARE num INT ;SET num = 0 ;
WHILE num < 10 DOSELECT num ;SET num = num + 1 ;
END WHILE ;
八、常见函数
mysql内置的函数只能在sql语句中使用
1.移除指定字符
Trim、LTrim、RTrim
2.大小写转换
Lower、Upper
3.获取左右起始指定个数字符
Left、Right
4.返回读音相似值(对英文效果)
Soundex
5.日期格式:date_format
eg:
1.where Date(sub_time) = ‘2015-03-01’ # 年月日
2.where Year(sub_time)=2016 AND Month(sub_time)=07; # year 年 month 月
九、索引
索引就是一种数据结构,创建索引在查找数据时查询速度会变快,相对的增改删速度会变慢,因为每次增改删都会重建索引。
索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构
- primary key 主键
- unique key 唯一键
- index key 索引键
上面三种key前两种除了有加速查询的效果之外还有额外的约束条件(primary key:非空且唯一,unique key:唯一),而index key没有任何约束功能只会帮你加速查询
CREATE TABLE 表名
(……
INDEX|KEY [索引名](列名)
); #创建表的同时创建索引。使用 INDEX 或者 KEY,索引名可以省略。根据先装数据,后建索引的原则,所以一般不建议在创建表的同时创建索引。
CREATE INDEX 索引名 ON 表名(列名);
或者
ALTER TABLE 表名 ADD INDEX|KEY [索引名](列 名);#在已经存在的表上创建索引
# 删除索引
DROP INDEX 索引名 ON 表名;
#或者
ALTER TABLE 表名 DROP INDEX|KEY 索引名;# 显示该表的索引信息
SHOW INDEX FROM 表名;
# 或者
SHOW KEYS FROM 表名;
数据库——python操作MySQL、修改表SQL语句、视图、触发器、存储过程、事务、流程控制、常见函数、索引相关推荐
- python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击
目录 part1:用python连接mysql 1.用python连接mysql的基本语法 创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标 ...
- python执行mysql多个sql语句_mysql -- 一次执行多条sql语句
最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...
- mysql修改表结构语句
mysql alter 用法,修改表,字段等信息 一: 修改表信息 1.修改表名 alter table test_a rename to sys_app; 2.修改表注释 alter table s ...
- mysql创建表sql语句
直接给出sql语句 DROP TABLE IF EXISTS `test_table_name`; CREATE TABLE `test_table_name` (`id` int(11) NOT N ...
- 〖Python 数据库开发实战 - MySQL篇⑯〗- SQL 语句的条件查询
万叶集
- mysql 建表 sql语句
--目标:创建一个 school数据库 CREATE DATABASE IF NOT EXISTS `school`;--创建学生表 --学号 INT 登陆密码 VARCHAR 姓名 性别 出生日期 ...
- Python操作Mysql实例代码教程(查询手册)
2019独角兽企业重金招聘Python工程师标准>>> 本文介绍了Python操作MYSQL.执行SQL语句.获取结果集.遍历结果集.取得某个字段.获取表字段名.将图片插入数据库.执 ...
- Python3.x的mysqlclient的安装、Python操作mysql,python连接MySQL数据库,python创建数据库表,带有事务的操作,CRUD
1.数据库操作 1.1准备工作: 1.安装一个mysql数据库软件 2.创建一个数据库,test 3.在python的环境安装一个模块: MySQLdb 1.2 安装mysql的连接包 第一种:工具安 ...
- python操作mysql中的表_带你了解什么是Python操作MySQL数据库
写这篇文章主要是为了介绍Python操作MySQL数据库,并结合相应的实例带你更加深入了解.文中的代码实例很详细,对大家有一定的参考学习价值. 1.什么是pymysql? PyMySQL是在Pytho ...
最新文章
- swift -charts框架雷达图
- 学习C语言必须知道的理论知识(第一章)
- python跳出if条件_python的if条件判断
- CSS清除浮动_清除float浮动
- Android使用ActivityGroup设置android:windowSoftInputMode失效的问题
- 【Tiny4412】Tiny4412编译和烧写uboot
- Scroll Dialog
- JSP使用教程(第四版)学习笔记
- Linux怎么去掉secondary地址,有关IP aliasing, Primary address和Secondary address
- JS的浮点数计算精度丢失问题解决方案
- 日志宝:大众也能看懂的Web访问日志数据分析
- HTML5七夕情人节表白网页制作【浪漫森林落叶钢琴紫色3D相册】HTML+CSS+JavaScript
- odoo开发:关于打印repair模块PDF报表,默认纸张头部有一大块空白无法修改的问题解决方案
- 小程序开发:WeUI用npm导入
- python真值是什么意思_Python 为什么能支持任意的真值判断?
- 华硕K42J设置USB启动系统
- java 连接 firebird
- QT实现打印预览及生成Pdf功能
- 滚动轴承故障诊断MATLAB程序:快速谱峭度、谱峭度+包络谱分析
- 互联网晚报 | 6月26日 星期日 |​ ​​官方澄清“i茅台”将上线“500毫升53度飞天茅台”;一批顶流基金经理调仓...
热门文章
- 中长期规划---螺旋式上升方式修改完善职业之路
- lisp全部文本改宋体字型_[推荐]修改任何文字(包括属性块、有名无名块)
- python数据分析相关论文_菜鸟学Python|数据分析精华文章大集合
- 【笔记:模拟MOS集成电路】单级放大器(非高频)
- ipad怎么和mac分屏_Macbook在ipad上怎么投屏和分屏,推荐两个app
- 中小学生应对网络暴力的策略
- px,dp与sp的区别以及换算
- linear-gradient的用法详解
- 华容道06--屏幕点击事件和角色间的碰撞
- Kingston DataTraveler G3 4G 量产成功