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 相关文章推荐
跟老齐学Python之Python文档
Oct 10 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
九步学会Python装饰器
May 09 Python
Python二分法搜索算法实例分析
May 11 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
一看就懂得Python的math模块
Oct 21 Python
用python生成1000个txt文件的方法
Oct 25 Python
微信小程序python用户认证的实现
Jul 29 Python
使用python实现kNN分类算法
Oct 16 Python
python文件读写代码实例
Oct 21 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 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
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
vue计算属性和监听器实例解析
2018/05/10 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
JavaScript如何操作css
2020/10/24 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
python3操作mysql数据库的方法
2017/06/23 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python实现的生成word文档功能示例
2019/08/23 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
工艺员岗位职责
2014/02/11 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
宿舍管理制度范本
2015/08/07 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript