利用Python如何批量修改数据库执行Sql文件


Posted in Python onJuly 29, 2018

前言

由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些重复性的劳动,所以打算用Python来批量执行sql

环境

  • 版本:Python3.6
  • 系统:MacOS
  • IDE:PyCharm
  • 第三方库:pymysql

Show Code

import pymysql

host = 'xxx.65.9.191'
username = 'root'
password = 'root'

def connectMySQL():
 print('开始连接数据库')
 # 打开数据库连接
 db = pymysql.connect(host,username,password,charset='utf8')

 # 使用 cursor() 方法创建一个游标对象 cursor
 cursor = db.cursor()

 # 使用 execute() 显示所有数据库
 cursor.execute("SHOW DATABASES")
 print('开始查询所有数据库')

 # 获取所有数据库名称
 data = cursor.fetchall()

 # 开始操作
 for dbb in data:
  dbname = dbb[0]
  print('选中' + dbname + '数据库')
  # 选择数据库
  cursor.execute("use " + dbname)
  # 查看有哪些表
  cursor.execute("show tables")
  table = cursor.fetchall()
  # 如果不是3个表的就不管
  if len(table) != 3:
   continue
  for tb in table:
   tbname = tb[0]
   print('开始删除'+tbname+'表')
   # 删除所有的表
   cursor.execute("DROP TABLE " + tbname)
  executeScriptsFromFile('1.sql', cursor)
 db.close()


def executeScriptsFromFile(filename,cursor):
 fd = open(filename, 'r',encoding='utf-8')
 sqlFile = fd.read()
 fd.close()
 sqlCommands = sqlFile.split(';')

 for command in sqlCommands:
  try:
   cursor.execute(command)
  except Exception as msg:
   print(msg)

 print('sql执行完成')


if __name__ == "__main__":
 connectMySQL()

解释代码

这是用于执行sql文件,这里第一句就有个坑,最好设置encoding='utf-8'否则可能会报错UnicodeEncodeError: 'latin-1' codec can't encode characters in position 41-44: ordinal not in range(256),当读取了sql文件后用;分割语句然后用for循环依次执行sql语句

def executeScriptsFromFile(filename,cursor):
 fd = open(filename, 'r',encoding='utf-8')
 sqlFile = fd.read()
 fd.close()
 sqlCommands = sqlFile.split(';')

 for command in sqlCommands:
  try:
   cursor.execute(command)
  except Exception as msg:
   print(msg)
 print('sql执行完成')

这一段比较容易理解了,首先是连接数据库,注意还是最好设置一下charset='utf8' ,因为我要操作多个数据库执行sql文件,所以先把数据库名称全部获取出来,这里获取出来的结果是元组类型,即使for循环后出来的也是一个元组,所以用[0]取出元组中的值,然后选中数据库执行删表操作(当然不是每个人都要按我这些操作哈,需要执行啥操作就自己改SQL语句),表删完了,然后开始执行1.sql文件,执行完成后关闭数据库

def connectMySQL():
 print('开始连接数据库')
 # 打开数据库连接
 db = pymysql.connect(host,username,password,charset='utf8')

 # 使用 cursor() 方法创建一个游标对象 cursor
 cursor = db.cursor()

 # 使用 execute() 显示所有数据库
 cursor.execute("SHOW DATABASES")
 print('开始查询所有数据库')

 # 获取所有数据库名称
 data = cursor.fetchall()

 # 开始操作
 for dbb in data:
  dbname = dbb[0]
  print('选中' + dbname + '数据库')
  # 选择数据库
  cursor.execute("use " + dbname)
  # 查看有哪些表
  cursor.execute("show tables")
  table = cursor.fetchall()
  # 如果不是3个表的就不管
  if len(table) != 3:
   continue
  for tb in table:
   tbname = tb[0]
   print('开始删除'+tbname+'表')
   # 删除所有的表
   cursor.execute("DROP TABLE " + tbname)
  executeScriptsFromFile('1.sql', cursor)
 db.close()

这2篇文章的代码从思路、编写、到测试,用了一下午吧!我对Python也不是很熟悉,所以中间也踩了些坑,但确实能看出来,Python作为胶水语言拿来做这些小工具真的舒服!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
使用Python编写Linux系统守护进程实例
Feb 03 Python
Python实现新浪博客备份的方法
Apr 27 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
SVM基本概念及Python实现代码
Dec 27 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
python验证身份证信息实例代码
May 06 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
Python 实现微信自动回复的方法
Sep 11 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
利用Python如何批量更新服务器文件
Jul 29 #Python
python高阶爬虫实战分析
Jul 29 #Python
python3.5基于TCP实现文件传输
Mar 20 #Python
python3基于TCP实现CS架构文件传输
Jul 28 #Python
python cs架构实现简单文件传输
Mar 20 #Python
Tornado Web Server框架编写简易Python服务器
Jul 28 #Python
python使用tornado实现登录和登出
Jul 28 #Python
You might like
php实现简单洗牌算法
2013/06/18 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python每隔N秒运行指定函数的方法
2015/03/16 Python
python实现微信小程序自动回复
2018/09/10 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
办公室文秘自我评价
2013/09/21 职场文书
中医药大学毕业生自荐信
2013/11/08 职场文书
实用的简历自我评价
2014/03/06 职场文书
个人工作主要事迹
2014/05/08 职场文书
项目建议书模板
2014/05/12 职场文书
会计系毕业求职信
2014/08/07 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
个人四风对照检查材料
2014/09/26 职场文书
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python