Python操作MySQL数据库的示例代码


Posted in Python onJuly 13, 2020

1. MySQL Connector

1.1 创建连接

import mysql.connector
 config={
   "host":"localhost","port":"3306",
   "user":"root","password":"password",
   "database":"demo"
 }
 con=mysql.connector.connect(**config)
 import mysql.connector
 config={
   "host":"localhost","port":"3306",
   "user":"root","password":"password",
   "database":"demo"
 }
 con=mysql.connector.connect(**config)

1.2 Cursor

import mysql.connector
 con=mysql.connector.connect(
   host="localhost",port="3306",
   user="root",password="password",
   database="demo"
 )
 cursor=con.cursor()
 sql="SELECT empno,job,sal FROM t_bonus;"
 cursor.execute(sql)
 print(type(cursor))
 for i in cursor:
   print(i)
 con.close()
 
 Result:
   <class 'mysql.connector.cursor_cext.CMySQLCursor'>
   (7369, 'CLERK', Decimal('8000.00'))
   (7499, 'SALESMAN', Decimal('1600.00'))
   (7521, 'SALESMAN', Decimal('1250.00'))
   (7566, 'MANAGER', Decimal('2975.00'))
   (7654, 'SALESMAN', Decimal('1250.00'))
   (7698, 'MANAGER', Decimal('2850.00'))
   (7782, 'MANAGER', Decimal('2450.00'))
   (7788, 'ANALYST', Decimal('3000.00'))
   (7839, 'PRESIDENT', Decimal('5000.00'))
   (7844, 'SALESMAN', Decimal('1500.00'))
   (7900, 'CLERK', Decimal('950.00'))
   (7902, 'ANALYST', Decimal('3000.00'))
   (7934, 'CLERK', Decimal('1300.00'))

1.3 SQL注入攻击

  1. username=1 OR 1=1 password=1 OR 1=1
  2. 在使用字符串直接拼接时OR之前不管对错,与OR结合都为true
  3. 解决方法——预编译(也可以提高速度)

1.4 事务管理和异常处理

sql连接和使用异常处理异常

import mysql.connector
 try:
   con=mysql.connector.connect(
     host="localhost",port="3306",
     user="root",password="password",
     database="demo"
   )
   con.start_transaction()
   cursor=con.cursor()
   sql="INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s);"
   cursor.execute(sql,(60,"SALES","HUBAI"))
   con.commit()
 except Exception as e:
   if "con" in dir():
     con.rollback()
   print(e)
 finally:
   if "con" in dir():
     con.close()

1.5 删除数据

import mysql.connector,mysql.connector.pooling
 config={
   "host": "localhost", "port": "3306",
   "user": "root", "password": "password",
   "database": "demo"
 }
 try:
   pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=5)
   con=pool.get_connection()
   con.start_transaction()
   cursor = con.cursor()
   sql = "DELETE FROM t_dept WHERE deptno=%s"
   cursor.execute(sql, (70,))
   con.commit()
 except Exception as e:
   if "con" in dir():
     con.rollback()
   print(e)
 # do not need to close con

executemany() 反复执行一条SQL语句

import mysql.connector,mysql.connector.pooling
 config={
   "host": "localhost", "port": "3306",
   "user": "root", "password": "password",
   "database": "demo"
 }
 try:
   pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=5)
   con=pool.get_connection()
   con.start_transaction()
   cursor = con.cursor()
   sql = "INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s);"
   date=[[70,"SALES","BEIJING"],[80,"ACTOR","SHANGHAI"]]
   cursor.executemany(sql, date)
   con.commit()
 except Exception as e:
   if "con" in dir():
     con.rollback()
   print(e)
 # do not need to close con

2. 数据库连接池

  1. 数据库的连接是昂贵的,一个连接要经过TCP三次握手,四次挥手,而且一台计算机的最大线程数也是有限的
  2. 数据库连接池技术就是先创建好连接,再直接拿出来使用
import mysql.connector,mysql.connector.pooling
 config={
   "host": "localhost", "port": "3306",
   "user": "root", "password": "password",
   "database": "demo"
 }
 try:
   pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=5)
   con=pool.get_connection()
   con.start_transaction()
   cursor = con.cursor()
   sql = "INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s);"
   cursor.execute(sql, (70, "SALES", "HUBAI"))
   con.commit()
 except Exception as e:
   if "con" in dir():
     con.rollback()
   print(e)
 # do not need to close con

以上就是Python操作MySQL数据库的示例代码的详细内容,更多关于Python操作MySQL数据库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python实现k-means聚类算法
Feb 23 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
Django中如何使用sass的方法步骤
Jul 09 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
Python基于正则表达式实现计算器功能
Jul 13 #Python
python输出结果刷新及进度条的实现操作
Jul 13 #Python
python实现图像外边界跟踪操作
Jul 13 #Python
Python实现打包成库供别的模块调用
Jul 13 #Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 #Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 #Python
Python使用pyexecjs代码案例解析
Jul 13 #Python
You might like
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
python脚本实现查找webshell的方法
2014/07/31 Python
Python语法分析之字符串格式化
2019/06/13 Python
pandas中的series数据类型详解
2019/07/06 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
django教程如何自学
2020/07/31 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
中医专业职业生涯规划书范文
2014/01/04 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
请假条范文大全
2014/04/10 职场文书
情人节寄语大全
2014/04/11 职场文书
司法所长先进事迹
2014/06/02 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
西安事变观后感
2015/06/12 职场文书