MySQL(10) - Python与MySQL的交互
1.MySQL驱动模块Connector的语法
1.1.下载驱动
进入官网下载对应版本驱动
1.2.创建连接
方式一:
import mysql.connector
con = mysql.connector.connect(
host="localhost",port="3306",user="root",password="123456",database="vega"
)
con.close() #运行脚本,不报错,连接成功方式二:
import mysql.connector
config = {
"host":"localhost",
"port":3306,
"user":"root",
"password":"123456",
"database":"vega"
}
con = mysql.connector.connect(**config)
#运行脚本,不报错,连接成功
1.3.创建游标
创建游标,执行SQL语句
1 import mysql.connector
2 #创建连接
3 config = {
4 "host":"localhost",
5 "port":3306,
6 "user":"root",
7 "password":"123456",
8 "database":"vega"
9 }
10 con = mysql.connector.connect(**config)
11 #创建游标
12 cursor=con.cursor()
13 #编写sql
14 sql = "SELECT * FROM t_role;"
15 #通过游标执行sql
16 cursor.execute(sql)
17 #打印最后结果
18 for i in cursor:
19 print(i)
20 '''
21 输出结果
22 (2, '新闻编辑')
23 (1, '管理员')
24 '''
25 print(cursor,type(cursor)) #CMySQLCursor: SELECT * FROM t_role; <class 'mysql.connector.cursor_cext.CMySQLCursor'>
2.SQL注入攻击案例
1 import mysql.connector
2
3 #创建连接
4 config = {
5 "host":"localhost",
6 "port":3306,
7 "user":"root",
8 "password":"123456",
9 "database":"vega"
10 }
11 con = mysql.connector.connect(**config)
12
13 #系统登录用户信息
14 username="1 OR 1=1"
15 password="1 OR 1=1"
16
17 #创建游标
18 cursor=con.cursor()
19 #编写sql
20 sql = "SELECT COUNT(*) FROM t_user WHERE username= %s" \
21 " AND AES_DECRYPT(UNHEX(password),'HelloWorld')=%s";
22 #通过游标执行sql
23 cursor.execute(sql%(username,password))
24 #打印最后结果
25 print(cursor.fetchone()[0]) #2
26 con.close()
1 import mysql.connector
2
3 #创建连接
4 config = {
5 "host":"localhost",
6 "port":3306,
7 "user":"root",
8 "password":"123456",
9 "database":"vega"
10 }
11 con = mysql.connector.connect(**config)
12
13 #系统登录用户信息
14 username="1 OR 1=1"
15 password="1 OR 1=1"
16
17 #创建游标
18 cursor=con.cursor()
19 #编写sql
20 sql = "SELECT COUNT(*) FROM t_user WHERE username= %s" \
21 " AND AES_DECRYPT(UNHEX(password),'HelloWorld')=%s";
22 #通过游标执行sql
23 cursor.execute(sql,(username,password))
24 #打印最后结果
25 print(cursor.fetchone()[0]) #0
26 con.close()
3.MySQL Connector的异常处理
1 import mysql.connector
2
3 try:
4 con=mysql.connector.connect(
5 host="localhost",
6 port=3306,
7 user="root",
8 password="123456",
9 database="vega"
10 )
11 con.start_transaction()
12 cursor = con.cursor()
13 sql="INSERT INTO t_type(type) VALUES(%s)"
14 cursor.execute(sql,("直播",))
15 con.commit()
16
17 except Exception as e:
18 if "con" in dir():
19 con.rollback()
20 print(e)
21 finally:
22 if "con" in dir():
23 con.close()
4.数据库连接池
1 import mysql.connector.pooling
2
3 config={
4 "host":"localhost",
5 "port":3306,
6 "user":"root",
7 "password":"123456",
8 "database":"vega"
9 }
10 try:
11 pool=mysql.connector.pooling.MySQLConnectionPool(
12 **config,
13 pool_size=10
14 )
15 con=pool.get_connection()
16 con.start_transaction()
17 cursor=con.cursor()
18 sql="UPDATE t_type SET type=%s WHERE id=6"
19 cursor.execute(sql,("斗鱼",))
20 con.commit()
21 except Exception as e:
22 if "con" in dir():
23 con.rollback()
24 print(e)1 # 删除数据,delete和truncate
2
3 import mysql.connector.pooling
4 config={
5 "host":"localhost",
6 "port":3306,
7 "user":"root",
8 "password":"123456",
9 "database":"demo"
10 }
11 try:
12 pool=mysql.connector.pooling.MySQLConnectionPool(
13 **config,
14 pool_size=10
15 )
16 con=pool.get_connection()
17 # con.start_transaction()
18 cursor=con.cursor()
19 # sql="DELETE e,d FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno " \
20 # "WHERE d.deptno=20"
21 sql="TRUNCATE TABLE t_dept" # TRUNCATE 实现删除功能
22 cursor.execute(sql)
23 # con.commit()
24 except Exception as e:
25 # if "con" in dir():
26 # con.rollback()
27 print(e)
1 # 使用 executemany()
2
3 import mysql.connector.pooling
4
5 config={
6 "host":"localhost",
7 "port":3306,
8 "user":"root",
9 "password":"123456",
10 "database":"demo"
11 }
12 try:
13 pool=mysql.connector.pooling.MySQLConnectionPool(
14 **config,
15 pool_size=10
16 )
17 con=pool.get_connection()
18 con.start_transaction()
19 cursor=con.cursor()
20 sql="INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s)"
21 data=[
22 [100,"A部门","北京"],[110,"B部门","上海"]
23 ]
24 cursor.executemany(sql,data)
25 con.commit()
26 except Exception as e:
27 if "con" in dir():
28 con.rollback()
29 print(e)
5.案例练习(一)
前置条件:数据库脚本
1 SET NAMES utf8mb4;
2 SET FOREIGN_KEY_CHECKS = 0;
3
4 -- ----------------------------
5 -- Table structure for t_bonus
6 -- ----------------------------
7 DROP TABLE IF EXISTS `t_bonus`;
8 CREATE TABLE `t_bonus` (
9 `empno` int(4) NOT NULL,
10 `job` varchar(20) DEFAULT NULL,
11 `sal` decimal(10,2) DEFAULT NULL,
12 `comm` decimal(10,2) DEFAULT NULL,
13 PRIMARY KEY (`empno`)
14 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
15
16 -- ----------------------------
17 -- Table structure for t_dept
18 -- ----------------------------
19 DROP TABLE IF EXISTS `t_dept`;
20 CREATE TABLE `t_dept` (
21 `deptno` int(2) NOT NULL,
22 `dname` varchar(20) DEFAULT NULL,
23 `loc` varchar(20) DEFAULT NULL,
24 PRIMARY KEY (`deptno`)
25 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
26
27 -- ----------------------------
28 -- Records of t_dept
29 -- ----------------------------
30 BEGIN;
31 INSERT INTO `t_dept` VALUES (10, 'ACCOUNTING', 'NEW YORK');
32 INSERT INTO `t_dept` VALUES (20, 'RESEARCH', 'DALLAS');
33 INSERT INTO `t_dept` VALUES (30, 'SALES', 'CHICAGO');
34 INSERT INTO `t_dept` VALUES (40, 'OPERATIONS', 'BOSTON');
35 COMMIT;
36
37 -- ----------------------------
38 -- Table structure for t_emp
39 -- ----------------------------
40 DROP TABLE IF EXISTS `t_emp`;
41 CREATE TABLE `t_emp` (
42 `empno` int(4) NOT NULL,
43 `ename` varchar(20) DEFAULT NULL,
44 `job` varchar(20) DEFAULT NULL,
45 `mgr` int(4) DEFAULT NULL,
46 `hiredate` date DEFAULT NULL,
47 `sal` decimal(10,2) DEFAULT NULL,
48 `comm` decimal(10,2) DEFAULT NULL,
49 `deptno` int(2) DEFAULT NULL,
50 PRIMARY KEY (`empno`)
51 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
52
53 -- ----------------------------
54 -- Records of t_emp
55 -- ----------------------------
56 BEGIN;
57 INSERT INTO `t_emp` VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17 00:00:00', 800.00, NULL, 20);
58 INSERT INTO `t_emp` VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20 00:00:00', 1600.00, 300.00, 30);
59 INSERT INTO `t_emp` VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22 00:00:00', 1250.00, 500.00, 30);
60 INSERT INTO `t_emp` VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02 00:00:00', 2975.00, NULL, 20);
61 INSERT INTO `t_emp` VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28 00:00:00', 1250.00, 1400.00, 30);
62 INSERT INTO `t_emp` VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01 00:00:00', 2850.00, NULL, 30);
63 INSERT INTO `t_emp` VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09 00:00:00', 2450.00, NULL, 10);
64 INSERT INTO `t_emp` VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1982-12-09 00:00:00', 3000.00, NULL, 20);
65 INSERT INTO `t_emp` VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17 00:00:00', 5000.00, NULL, 10);
66 INSERT INTO `t_emp` VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08 00:00:00', 1500.00, 0.00, 30);
67 INSERT INTO `t_emp` VALUES (7876, 'ADAMS', 'CLERK', 7788, '1983-01-12 00:00:00', 1100.00, NULL, 20);
68 INSERT INTO `t_emp` VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03 00:00:00', 950.00, NULL, 30);
69 INSERT INTO `t_emp` VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03 00:00:00', 3000.00, NULL, 20);
70 INSERT INTO `t_emp` VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23 00:00:00', 1300.00, NULL, 10);
71 COMMIT;
72
73 -- ----------------------------
74 -- Table structure for t_salgrade
75 -- ----------------------------
76 DROP TABLE IF EXISTS `t_salgrade`;
77 CREATE TABLE `t_salgrade` (
78 `grade` int(11) NOT NULL,
79 `losal` decimal(10,2) DEFAULT NULL,
80 `hisal` decimal(10,2) DEFAULT NULL,
81 PRIMARY KEY (`grade`)
82 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
83
84 -- ----------------------------
85 -- Records of t_salgrade
86 -- ----------------------------
87 BEGIN;
88 INSERT INTO `t_salgrade` VALUES (1, 700.00, 1200.00);
89 INSERT INTO `t_salgrade` VALUES (2, 1201.00, 1400.00);
90 INSERT INTO `t_salgrade` VALUES (3, 1401.00, 2000.00);
91 INSERT INTO `t_salgrade` VALUES (4, 2001.00, 3000.00);
92 INSERT INTO `t_salgrade` VALUES (5, 3001.00, 9999.00);
93 COMMIT;
94
95 SET FOREIGN_KEY_CHECKS = 1;python代码
1 import mysql.connector.pooling
2
3 config={
4 "host":"localhost",
5 "port":3306,
6 "user":"root",
7 "password":"123456",
8 "database":"demo"
9 }
10 try:
11 pool=mysql.connector.pooling.MySQLConnectionPool(
12 **config,
13 pool_size=10
14 )
15 con=pool.get_connection()
16 con.start_transaction()
17 cursor=con.cursor()
18 sql="DROP TABLE t_emp_new"
19 cursor.execute(sql)
20 sql = "CREATE TABLE t_emp_new LIKE t_emp" #创建t_emp_new表,只将t_emp表的表结构同步到t_emp_new表中
21 # sql="CREATE TABLE t_emp_new AS (SELECT * FROM t_emp)" 创建t_emp_new表,将t_emp表的表结构和数据一起同步到t_emp_new表中
22 cursor.execute(sql)
23
24 #使用INSERT语句,把部门平均底薪超过公司平均底薪的这样部门里的
25 #员工信息导入到t_emp_new表里面,并且让这些员工隶属于sales部门
26 sql="SELECT AVG(sal) AS avg FROM t_emp"
27 cursor.execute(sql)
28 temp=cursor.fetchone()
29 avg=temp[0] #公司平均工资
30 sql="SELECT deptno FROM t_emp GROUP BY deptno HAVING AVG(sal)>=%s"
31 cursor.execute(sql,[avg])
32 temp=cursor.fetchall()
33 sql="INSERT INTO t_emp_new SELECT * FROM t_emp WHERE deptno IN ("
34 for index in range(len(temp)):
35 one = temp[index][0]
36 if index < len(temp)-1:
37 sql+=str(one)+","
38 else:
39 sql+=str(one)
40 sql+=")"
41 cursor.execute(sql)
42
43 sql = "DELETE FROM t_emp WHERE deptno IN ("
44 for index in range(len(temp)):
45 one = temp[index][0]
46 if index < len(temp) - 1:
47 sql += str(one) + ","
48 else:
49 sql += str(one)
50 sql += ")"
51 cursor.execute(sql)
52
53 sql = "SELECT deptno FROM t_dept WHERE dname=%s"
54 cursor.execute(sql, ["SALES"])
55 deptno = cursor.fetchone()[0]
56 sql = "UPDATE t_emp_new SET deptno=%s"
57 cursor.execute(sql, [deptno])
58 con.commit()
59 except Exception as e:
60 if "con" in dir():
61 con.close()
62 print(e)
6.案例练习(二)
1 import mysql.connector.pooling
2
3 config={
4 "host":"localhost",
5 "port":3306,
6 "user":"root",
7 "password":"123456",
8 "database":"demo"
9 }
10 try:
11 pool=mysql.connector.pooling.MySQLConnectionPool(
12 **config,
13 pool_size=10
14 )
15 con=pool.get_connection()
16 con.start_transaction()
17 sql="INSERT INTO t_dept "\
18 "(SELECT MAX(deptno)+10,%s,%s FROM t_dept UNION "\
19 "SELECT MAX(deptno)+20,%s,%s FROM t_dept)"
20 cursor=con.cursor()
21 cursor.execute(sql,("A部门","北京","B部门","上海"))
22 con.commit()
23 except Exception as e:
24 if "con" in dir():
25 con.rollback()
26 print(e)7.Python操作Mysql数据库的步骤
1.用什么方法创建Connection对象呢,常用参数有哪些?
- 直接在connect()函数里面加参数
import mysql.connector con=mysql.connector.connect(
host="localhost",
port=3306,
user="root",
password="123456",
database="vega"
)- 参数加在字典中,然后通过可变参数赋值
![]()
import mysql.connector config = {
"host":"localhost",
"port":3306,
"user":"root",
"password":"123456",
"database":"vega"
}
con = mysql.connector.connect(**config)- 通过先建立连接池,再在连接池中获取连接
![]()
import mysql.connector.pooling config={
"host":"localhost",
"port":3306,
"user":"root",
"password":"123456",
"database":"demo"
}
pool=mysql.connector.pooling.MySQLConnectionPool(
**config,
pool_size=10
)
con=pool.get_connection()2.Connection对象常用方法有哪些?
开启事务 con.start_transaction()
提交事务 con.commit()
回滚事务 con.rollback()
创建游标对象 cursor=con.cursor()
关闭连接 con.close()
3.Cursor对象常用的方法和属性是什么?
- 执行SQL语句 cursor.excute(sql,(参数,))
- 执行多次SQL cursor.executemany(sql,data) #data参数集合
- 返回一条执行结果 cursor.fetchone()
- 返回多条执行结果 cursor.fetchall()
4.使用事务有哪些方法?
开启事务 con.start_transaction()
提交事务 con.commit()
回滚事务 con.rollback()
MySQL(10) - Python与MySQL的交互的更多相关文章
- MySQL之Python与Mysql交互
一:Python操作MySQL步骤 1:Python中操作MySQL的步骤 2.引入模块 在.py文件中引入pymysql模块 import pymysql pymysql是python的一个第三方与 ...
- mysql数据库----python操作mysql ------pymysql和SQLAchemy
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...
- Mysql学习---Python操作Mysql 1231
安装PyMysql 安装PyMysql:Py3默认自带pip3安装,Py2默认无pip命令 cmd进入PyCharm的安装目录完成安装 pip3 install pymysql 安装完成的位置:E:\ ...
- Python和Mysql、Nginx
链接: python入门和基础: Python 中文学习大本营 你是如何自学 Python 的? 简明 Python 教程 给伸手党的福利:Python 新手入门引导 <Python爬虫学习系列 ...
- Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
使用MySQL Connector/Python操作MySQL.MariaDB数据库 by:授客 QQ:1033553122 因目前MySQLdb并不支持python3.x,而MySQL官方已经提 ...
- python连接MySQL/redis/mongoDB数据库的简单整理
python连接mysql 用python操作mysql,你必须知道pymysql 代码示意: import pymysql conn = pymysql.connect(host='127.0.0. ...
- Python 管理 MySQL
Python MySQLdb 模块 Python pymysql 模块 Python SQLAlchemy 模块 Python ConfigParser 模块 Python 创建 MySQL 配置文件 ...
- Linux下使用Python操作MySQL数据库
安装mysql-python 1.下载mysql-python 打开终端: cd /usr/local sudo wget http://nchc.dl.sourceforge.net/sourcef ...
- mysql及python交互
mysql在之前写过一次,那时是我刚刚进入博客,今天介绍一下mysql的python交互,当然前面会把mysql基本概述一下. 目录: 一.命令脚本(mysql) 1.基本命令 2.数据库操作命令 3 ...
随机推荐
- 浅谈JavaScript原型与原型链
对于很多前端开发者而言,JavaScript的原型实在是很让人头疼,所以我这边就整理了一下自己对应原型的一点理解,分享给大家,供交流使用 原型 说起原型,那就不得不说prototype.__proto ...
- translate3d 对 z-index 居然有影响
在 Mobile 端需要注意. 安卓 默认浏览器 当中如果 div1 div2 如果 div1 有 translate3d 而 div2 没有 那么 div2 的 z-index 会无效. 解决办法: ...
- IDEA安装配置Scala环境
这里有详细步骤:windows上 IntelliJ IDEA安装scala环境 详细 初学
- 【Weex笔记】-- Animate.css的使用
animate.css是一个使用CSS3的animation制作的动画效果的CSS集合,里面预设了很多种常用的动画,且使用非常简单.本文将详细介绍animate.css的使用. 一,安装辅助依赖 np ...
- BootstrapBlazor实战-Tree树形控件使用(1)
实战BootstrapBlazor树型控件Tree的使用, 以及整合Freesql orm快速制作数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql/Sql ...
- RENIX软件V6板卡速率设置——网络测试仪实操
本文主要介绍RENIX软件V6板卡速率设置相关操作.全文分为V6板卡介绍.如何配置端口两大部分.其中从添加和连接机箱.预约端口.配置端口为强制10M.配置端口为自协商100M.配置说明五个方面详细介绍 ...
- Java语言学习day01--6月28日
Java语言学习day01一:Java概述 1.Java语言发展史 任职于太阳微系统的 詹姆斯·高斯林 等人于1990年代初开发Java语言的雏形,最初被命名为 Oak ,目标设置在 家用电器等小型系 ...
- 2021.12.06 P2511 [HAOI2008]木棍分割(动态规划)
2021.12.06 P2511 [HAOI2008]木棍分割(动态规划) https://www.luogu.com.cn/problem/P2511 题意: 有n根木棍, 第i根木棍的长度为 \( ...
- 数据结构 - AVL 树
简介 基本概念 AVL 树是最早被发明的自平衡的二叉查找树,在 AVL 树中,任意结点的两个子树的高度最大差别为 1,所以它也被称为高度平衡树,其本质仍然是一颗二叉查找树. 结合二叉查找树,AVL 树 ...
- Android 蓝牙串口通信工具类 SerialPortUtil 3.0.+
建议使用4.+版本,避免一些不必要的bug.4.+版本文档地址:https://www.cnblogs.com/shanya/articles/16062256.html SerialPortUtil ...



















