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 从远程服务器下载东西的代码
Feb 10 Python
python中使用OpenCV进行人脸检测的例子
Apr 18 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
Python中的函数作用域
May 07 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 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速度全攻略
2006/10/09 PHP
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP中的类型约束介绍
2015/05/11 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python批量查询域名是否被注册过
2017/06/21 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
全神贯注教学反思
2014/02/03 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
热门专业求职信
2014/05/24 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
投诉信回复范文
2015/07/03 职场文书
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技