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 相关文章推荐
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
介绍Python中的fabs()方法的使用
May 14 Python
Python获取当前路径实现代码
May 08 Python
Python实现excel转sqlite的方法
Jul 17 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
python绘图模块matplotlib示例详解
Jul 26 Python
python+django+rest框架配置创建方法
Aug 31 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 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
杏林同学录(一)
2006/10/09 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
实用自动化运维Python脚本分享
2018/06/04 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python中字符串的编码与解码详析
2020/12/03 Python
详解Python中的文件操作
2021/01/14 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
客户代表实习人员自我鉴定
2013/09/27 职场文书
服装公司总经理岗位职责
2013/11/30 职场文书
社区国庆节活动方案
2014/02/05 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
python基础详解之if循环语句
2021/04/24 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang