pymysql与mysql各功能
pymysql
# 增删改操作
import pymysql
client=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='egon123',
database='db2',
charset='utf8'
)
cursor=client.cursor()
# insert的三种方法:
# 方法一
sql='insert into t1 values(1,"egon"),(2,"lxx");' # 原生sql语句
try: # 下面省略异常捕捉
res=cursor.execute(sql)
print(res) # 返回的是执行表操作条数
client.commit() # 递交后才会改变数据
except Exception:
client.rollback() # 如果字段有误就能恢复修改前数据
#方法二
userinfo=[
(3,"alex"),
(4,"lxx"),
(5,"yxx")
]
for user in userinfo:
sql = ‘insert into t1 values(%s,”%s”);’ %(user[0],user[1])
cursor.execute(sql)
#方法三
sql = ‘insert into t1 values(%s,%s);’
cursor.executemany(sql,userinfo)
# 删除方法
cursor.execute(‘delete from t1 where id=3;’)
client.commit()
cursor.close()
client.close()
#查询操作
Import pymysql
client=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='egon123',
database='db6',
charset='utf8'
)
cursor =client.cursor()
inp_user=input('输入账号名: ').strip()
inp_pwd=input('输入密码: ').strip()
sql='select id from user where name = "%s" and pwd = password("%s");' %(inp_user,inp_pwd)
rows = cursor.execute(sql)
# 这个方法可以防止注入问题
# sql = 'select id from t1 where name =%s and password = %s; ' # 注意:账号密码不用引号了
# rows = cursor.execute(sql,(inp_user,inp_pwd)) # 这句防注入问题
if rows:
print(‘登录成功’)
else:
print(‘用户名或密码错误’)
cursor.close()
client.close()
# 不做任何处理会产生注入问题,比如输入账号时输入alex "-- sadafas
或 sadgasd " or 1=1 – sfaf类似的可以直接登录
视图
强调:1.字段名不能重复
2.视图是为了简化查询的sql语句,不应该修改视图中的记录
create view emp2dep as select emp.*,dep.name as dep_name from emp inner join dep on
emp.dep_id = dep.id;
触发器
准备表
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交时间
success enum ('yes', 'no') #0代表执行失败
);
CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_id int
);
delimiter $$ # 改变结束条件
CREATE TRIGGER tri_after_insert_cmd AFTER INSERT ON cmd FOR EACH ROW # 创建触发器
BEGIN
if NEW.success = 'no' then # if
insert into errlog(err_id) values(NEW.id);
end if;
END $$
delimiter ; # 必须改回结束条件
INSERT INTO cmd (
USER,
priv,
cmd,
sub_time,
success
)
VALUES
('egon','0755','ls -l /etc',NOW(),'yes'),
('egon','0755','cat /etc/passwd',NOW(),'no'),
('egon','0755','useradd xxx',NOW(),'no'),
('egon','0755','ps aux',NOW(),'yes');
#查询错误日志,发现有两条
#触发器可用于插入删除更新的前后
删除触发器:drop trigger tri_after_insert_cmd;
transaction:事务,交易
# 1、原子性:事务可以包含一系列的sql语句,事务的执行具有原子性
#2、回滚:包含多条sql语句要么都执行成功,要么都执行不成功
create table user(
id int primary key auto_increment,
name char(32),
balance int
);
insert into user(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);
#出现异常,回滚到初始状态
start transaction;
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
uppdate user set balance=1090 where name='ysb'; #卖家拿到90元,出现异常没有拿到
rollback;
commit;
存储过程
方案一:
应用程序:
mysql:编写存储过程
方案二:
应用程序:原生sql
mysql:
方案三:
应用程序:ORM(类/对象 --->原生sql)
mysql:
执行效率:
方案一 > 方案二 -> 方案三
开发效率:
方案一 > 方案三 -> 方案二
由于方案一所需的人员成本较高,我们一般使用方案三
# 无参
create table s1(
id int,
name varchar(20),
gender char(6),
email varchar(50)
)
delimiter $$
create procedure p2()
BEGIN
declare n int default 1; #设置整型n的初始值为1
while (n < 100) do
insert into s1 values(n,concat(‘egon’,n),’male’,concat(‘egon’,n,’@163.com’));
set n = n+1 # 注意不能用 n+=1
end while;
END $$
delimiter;
# 有参
delimiter $$
create procedure p3(
in n int, # 传入的值
out res int # 传出的值
)
BEGIN
select * from blog where id >n;
set res = 0;
END $$
delimiter;
# 直接在mysql中调用:
mysql> set @x=111;
mysql> call p3(3,@x);
mysql> select @x;
可以查到@x的值变为了0
# 在python中调用:
cursor.callproc('p4',(3,111)) #set @_p4_0 =
3; set @_p4_1 = 111
print(cursor.fetchall())
cursor.execute('select @_p4_1;')
print(cursor.fetchone())
pymysql与mysql各功能的更多相关文章
- Python3中使用PyMySQL连接Mysql
Python3中使用PyMySQL连接Mysql 在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Pyt ...
- Python 3.2: 使用pymysql连接Mysql
在python 3.2 中连接MYSQL的方式有很多种,例如使用mysqldb,pymysql.本文主要介绍使用Pymysql连接MYSQL的步骤 1 安装pymysql · ...
- pymysql:Mysql拒绝从远程访问的解决办法
pymysql:Mysql拒绝从远程访问的解决办法 pymysql连接数据库 # 导入pymysql模块 import pymysql # 连接database conn = pymysql.conn ...
- pymysql操作mysql
一.使用PyMySQL操作mysql数据库 适用环境 python版本 >=2.6或3.3 mysql版本>=4.1 安装 可以使用pip安装也可以手动下载安装.使用pip安装,在命令行执 ...
- Python3.x使用PyMysql连接MySQL数据库
Python3.x使用PyMysql连接MySQL数据库 由于Python3.x不向前兼容,导致Python2.x中的很多库在Python3.x中无法使用,例如Mysqldb,我前几天写了一篇博客Py ...
- python基础学习24----使用pymysql连接mysql
使用pymysql连接mysql 安装pymysql pymysql安装可以通过两种方式 使用pip安装 首先简单说一下pip的使用方法 获取帮助 pip --help 升级 pip pip inst ...
- MySQL日志功能详解
MySQL日志功能详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询日志 它是用来保存所有跟查询相关的日志,这种日志类型默认是关闭状态的,因为MySQL的用户有很多,如果 ...
- Python3.x:使用PyMysql连接Mysql数据库
Python3.x:使用PyMysql连接Mysql数据库 Python3.x完全不向前兼容,导致Python2.x中可以正常使用的库,到了Python3就用不了: 比如说mysqldb,目前MySQ ...
- mysql分区功能(三个文件储存一张表)(分区作用)(分区方式)
mysql分区功能(三个文件储存一张表)(分区作用)(分区方式) 一.总结 1.mysql数据表的存储方式(三个文件储存一张表): 一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放 ...
随机推荐
- hdfs基本思想
1.hdfs的优缺点 (1)不适合大量小文件存储: (2)不适合并发写入,不支持文件随机修改:(只能append追加) (3)不支持随机读等低延时的访问方式 2.基本思想 主从结构 主节点, name ...
- CentOS7安装MySQL5.7以及修改密码
CentOS7安装mysql [root@bd005 ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch. ...
- jq 浏览器窗口大小发生变化时
当调整浏览器窗口的大小时,发生 resize 事件: $(selector).resize(); 实例 对浏览器窗口调整大小进行计数: $(window).resize(function() { $( ...
- linux网络编程之IO模型
本文转自作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓 ...
- MediaWiki安装配置(Linux)【转】
转自:http://blog.csdn.net/gao36951/article/details/43965527 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 1Media ...
- Linux 入门记录:十、Linux 下获取帮助
一.获取帮助 Linux 提供了极为详细的帮助工具和文档,通过查阅相关文档,可以大大减少需要记忆的东西并提高效率. 二.--help参数 几乎所有命令都可以使用 -h 或 --help 参数获取命令的 ...
- java 和 JVM
C++和Java的区别 指针:java中不存在指针的概念,编程者无法直接通过指针来直接访问内存,有利于维护java程序的安全 多重继承:C++支持多重继承,java不支持多重继承,但是允许一个类继承多 ...
- RSA加密解密与加签验签
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...
- jQuery为多个元素绑定同一个事件
$('.toals,input[type=datetime]').on('focus',function(){ $('.footer-focus-none').css('display','none' ...
- thinkphp模板常用的方法
thinkphp模板我是看了3.2的文档,对里面的东西过了一遍,然后在写到需要用到模板的东西的时候就有印象,有的能直接回顾,但是有的就可能只知道有这个东西,但是不知道怎么用,所以就重新查手册,这个的话 ...