python数据库操作批量sql执行_使用Python批量修改数据库执行Sql文件
由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的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文件相关推荐
- python学习有哪些方向可以选择_学习python就业方向都有哪些?
百战程序员IT问题专业解答 Python作为一种程序开发语言,近年来确实很火,很多企业也都在招聘这样的人才.那么这类Python人才都是具体做什么工作,解决企业什么问题的呢? 1.web网站开发 Py ...
- python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件
利用Python如何批量修改数据库执行Sql文件 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...
- python 接口自动化的sql验证_基于Python的接口自动化实战-基础篇之pymysql模块操做数据库...
引言 在进行功能或者接口测试时经常须要经过链接数据库,操做和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操做是否正确等.所以,在进行接口自动化测试时,咱们同样绕不开接 ...
- python怎么批量下载年报_使用Python批量下载Wind数据库中的PDF报告
原标题:使用Python批量下载Wind数据库中的PDF报告 背景 最近小编出于工作需要,准备在Wind金融数据终端批量下载上市公司2019年第一季度业绩预告.通过相关的条件检索,发现其相关数据有近百 ...
- python访问数据库如何解决高并发_使用 Python 和 Oracle 数据库实现高并发性
随着趋势发展的核心转向更多而不是更快发展,最大限度地提高并发性的重要性日益凸显.并发性使得编程模式发生了新的转变,可以编写异步代码,从而将多个任务分散到一组线程或进程中并行工作.如果您不是编程新手并且 ...
- 为什么preparedstatement能防止sql注入_使用Python防止SQL注入攻击的实现示例
文章背景 每隔几年,开放式Web应用程序安全项目就会对最关键的Web应用程序安全风险进行排名.自第一次报告以来,注入风险高居其位!在所有注入类型中,SQL注入是最常见的攻击手段之一,而且是最危险的.由 ...
- python对excel增删改查_利用python模拟sql语句对员工表格进行增删改查
本文主要给大家介绍了关于python模拟sql语句对员工表格进行增删改查的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 具体需求: 员工信息表程序,实现增删改查操作: 可进行模糊查询, ...
- python 文件批量转换格式_使用python批量化音乐文件格式转换的实例
使用python批量化音乐文件格式转换的实例 最近在做声音文件数据处理,写了一个自动将m4a文件转化为wav的脚本. import os m4a_path = "/Users/Downloa ...
- python sql脚本_使用Python SQL脚本进行数据采样
python sql脚本 介绍 (Introduction) The Python programming language is object oriented, easy to use and, ...
- python向es写入大量数据_使用Python-elasticsearch-bulk批量快速向elasticsearch插入数据_李谦的博客-CSDN博客...
from elasticsearch import Elasticsearch from elasticsearch import helpers import pymysql import time ...
最新文章
- 实战|基于图割算法的木材表面缺陷图像分析
- 被Facebook终止合作,被谷歌下架,股价营收皆腰斩,猎豹只剩AI一根救命稻草了...
- linux iscsi 服务端,Linux的iscsi磁盘服务
- 你知道荷兰旗问题吗?
- 淘宝Hadoop现有测试框架探幽
- 20万+奖金池,“智在飞翔”2021 • 无人飞行器智能感知大赛,战火重燃 • 等你来战!!...
- share——Alpha版(内部测试版)发布
- freemarker和thymeleaf的使用样例
- RESTful登录设计(基于Spring及Redis的Token鉴权)
- 阿里云原生“因云而生”心智大图重磅发布
- 《Spring Boot极简教程》第1章 Spring Boot史前简述
- 生产计划排程为什么会这么难?
- 编程猫python课程结束后哪里再学更高级别的_@正在选编程猫的家长,先别急,看完这篇测评再报也不迟!...
- Intellij IDEA里的md5验证
- windows下安装spark
- jquery实现图片上传
- 前景广阔的技术---云计算
- sysbench花式采坑之一:自增值导致的TPS不可靠
- Base64 和 MD5 加密
- JZ高中OJ 3404. [NOIP2013模拟]卡牌游戏