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()

最新文章

  1. 有关日期的函数操作用法总结,to_date(),trunc(),add_months();
  2. css的字体
  3. oracle用户创建
  4. 配置gradle.properties
  5. [汇编与C语言关系]4. 结构体和联合体
  6. 【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布
  7. System.Web.Mvc.dll在各个版本MVC中的文件位置
  8. Shi-Tomasi角点检测
  9. 容器---List和AbstractList
  10. linux中deb怎样安装
  11. 【c++】中文设置
  12. poj2411Mondriaan&#39;s Dream(状压)
  13. 去掉word中向下的箭头^l-----&gt;^p
  14. Mybatis-plus快速入门
  15. python3 练手实例3 摄氏温度与华氏温度转换
  16. protobuf 动态创建
  17. Sublime3 - 插件cssrem
  18. Linux系列教程(七)——Linux常用命令之帮助和用户管理命令
  19. vue 本地开发时使用localhost与ip访问
  20. SQL Server 3

热门文章

  1. Django ElasticSearch Ionic 打造 GIS 移动应用 —— 架构设计
  2. APICloud重磅支持Atom编辑器,并建立开发工具核心库
  3. SQL之总结(二)
  4. WordPress 网站开发“微信小程序“实战(二)
  5. H5复制粘贴双端适配的解决方案(终极版)
  6. Python使用函数实现杨辉三角
  7. spring-Bean依赖注入-》普通数据类型
  8. 利用js获取不同页面间跳转需要传递的参数
  9. 函数 装饰器 python
  10. C#/VB.NET 将RTF转为HTML