由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的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执行完成')

cha

这一段比较容易理解了,首先是连接数据库,注意还是最好设置一下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数据库操作批量sql执行_使用Python批量修改数据库执行Sql文件相关推荐

  1. python学习有哪些方向可以选择_学习python就业方向都有哪些?

    百战程序员IT问题专业解答 Python作为一种程序开发语言,近年来确实很火,很多企业也都在招聘这样的人才.那么这类Python人才都是具体做什么工作,解决企业什么问题的呢? 1.web网站开发 Py ...

  2. python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件

    利用Python如何批量修改数据库执行Sql文件 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...

  3. python 接口自动化的sql验证_基于Python的接口自动化实战-基础篇之pymysql模块操做数据库...

    引言 在进行功能或者接口测试时经常须要经过链接数据库,操做和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操做是否正确等.所以,在进行接口自动化测试时,咱们同样绕不开接 ...

  4. python怎么批量下载年报_使用Python批量下载Wind数据库中的PDF报告

    原标题:使用Python批量下载Wind数据库中的PDF报告 背景 最近小编出于工作需要,准备在Wind金融数据终端批量下载上市公司2019年第一季度业绩预告.通过相关的条件检索,发现其相关数据有近百 ...

  5. python访问数据库如何解决高并发_使用 Python 和 Oracle 数据库实现高并发性

    随着趋势发展的核心转向更多而不是更快发展,最大限度地提高并发性的重要性日益凸显.并发性使得编程模式发生了新的转变,可以编写异步代码,从而将多个任务分散到一组线程或进程中并行工作.如果您不是编程新手并且 ...

  6. 为什么preparedstatement能防止sql注入_使用Python防止SQL注入攻击的实现示例

    文章背景 每隔几年,开放式Web应用程序安全项目就会对最关键的Web应用程序安全风险进行排名.自第一次报告以来,注入风险高居其位!在所有注入类型中,SQL注入是最常见的攻击手段之一,而且是最危险的.由 ...

  7. python对excel增删改查_利用python模拟sql语句对员工表格进行增删改查

    本文主要给大家介绍了关于python模拟sql语句对员工表格进行增删改查的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 具体需求: 员工信息表程序,实现增删改查操作: 可进行模糊查询, ...

  8. python 文件批量转换格式_使用python批量化音乐文件格式转换的实例

    使用python批量化音乐文件格式转换的实例 最近在做声音文件数据处理,写了一个自动将m4a文件转化为wav的脚本. import os m4a_path = "/Users/Downloa ...

  9. python sql脚本_使用Python SQL脚本进行数据采样

    python sql脚本 介绍 (Introduction) The Python programming language is object oriented, easy to use and, ...

  10. python向es写入大量数据_使用Python-elasticsearch-bulk批量快速向elasticsearch插入数据_李谦的博客-CSDN博客...

    from elasticsearch import Elasticsearch from elasticsearch import helpers import pymysql import time ...

最新文章

  1. 实战|基于图割算法的木材表面缺陷图像分析
  2. 被Facebook终止合作,被谷歌下架,股价营收皆腰斩,猎豹只剩AI一根救命稻草了...
  3. linux iscsi 服务端,Linux的iscsi磁盘服务
  4. 你知道荷兰旗问题吗?
  5. 淘宝Hadoop现有测试框架探幽
  6. 20万+奖金池,“智在飞翔”2021 • 无人飞行器智能感知大赛,战火重燃 • 等你来战!!...
  7. share——Alpha版(内部测试版)发布
  8. freemarker和thymeleaf的使用样例
  9. RESTful登录设计(基于Spring及Redis的Token鉴权)
  10. 阿里云原生“因云而生”心智大图重磅发布
  11. 《Spring Boot极简教程》第1章 Spring Boot史前简述
  12. 生产计划排程为什么会这么难?
  13. 编程猫python课程结束后哪里再学更高级别的_@正在选编程猫的家长,先别急,看完这篇测评再报也不迟!...
  14. Intellij IDEA里的md5验证
  15. windows下安装spark
  16. jquery实现图片上传
  17. 前景广阔的技术---云计算
  18. sysbench花式采坑之一:自增值导致的TPS不可靠
  19. Base64 和 MD5 加密
  20. JZ高中OJ 3404. [NOIP2013模拟]卡牌游戏

热门文章

  1. osgi实战学习之路:6. Service-1
  2. iOS7与iOS8的比較
  3. sqlserver日志文件过大的处理方法
  4. swift 运算符和控制流程
  5. Entity Framework 的 edmx xml 文档解析
  6. 自动档车正确起步方法,自动挡开车起步7个步骤
  7. ST公司STM32F4与STM32F1的区别
  8. 新华社北京4月15日电 题:奋斗应提倡,996当退场
  9. 死锁产生的原因及四个必要条件
  10. extern C的主要作用简单解释