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实现股市信息下载的方法
Jun 15 Python
python爬虫基本知识
Mar 05 Python
Numpy数组转置的两种实现方法
Apr 17 Python
对python中array.sum(axis=?)的用法介绍
Jun 28 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
Django上线部署之IIS的配置方法
Aug 22 Python
Python爬虫使用代理IP的实现
Oct 27 Python
Python嵌套函数,作用域与偏函数用法实例分析
Dec 26 Python
Python数组并集交集补集代码实例
Feb 18 Python
Python3自定义json逐层解析器代码
May 11 Python
TensorFlow Autodiff自动微分详解
Jul 06 Python
python实现学生信息管理系统(面向对象)
Jun 05 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
浅析PHP水印技术
2007/02/14 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
JS判断数组那点事
2017/10/10 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
详解Django中的权限和组以及消息
2015/07/23 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
python实现3D地图可视化
2020/03/25 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
电子商务网站的创业计划书
2014/01/05 职场文书
银行学习十八大感想
2014/01/11 职场文书
旅游市场营销方案
2014/03/09 职场文书
环保建议书100字
2014/05/14 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
写给老师的感谢信
2015/01/20 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis