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 相关文章推荐
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
TensorFlow实现简单卷积神经网络
May 24 Python
python去除文件中重复的行实例
Jun 29 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
python scp 批量同步文件的实现方法
Jan 03 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
python unichr函数知识点总结
Dec 16 Python
Python实现一个论文下载器的过程
Jan 18 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
php强制下载类型的实现代码
2011/04/21 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
nodejs win7下安装方法
2012/05/24 NodeJs
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
Python中os和shutil模块实用方法集锦
2014/05/13 Python
python脚本内运行linux命令的方法
2015/07/02 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
Tornado 多进程实现分析详解
2018/01/12 Python
在python中实现对list求和及求积
2018/11/14 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
python中time包实例详解
2021/02/02 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
经典c++面试题六
2012/01/18 面试题
值传递还是引用传递
2015/02/08 面试题
四年的大学生生活自我评价
2013/12/09 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
不错的求职信范文
2014/07/20 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python