为了做数据对象的版本控制,需要将MySQL数据库中的表结构导出成文件进行版本化管理,试写了一下,可以完整导出数据库中的表结构信息

# -*- coding: utf-8 -*-
import os
import pymysqlclass DBTool:conn = Nonecursor = Nonedef __init__(self,conn_dict):self.conn = pymysql.connect(host=conn_dict['host'],port=conn_dict['port'],user=conn_dict['user'],passwd=conn_dict['password'],db=conn_dict['db'],charset=conn_dict['charset'])self.cursor = self.conn.cursor()def execute_query(self, sql_string):try:cursor=self.cursorcursor.execute(sql_string)list = cursor.fetchall()cursor.close()self.conn.close()return listexcept pymysql.Error as e:print("mysql execute error:", e)raisedef execute_noquery(self, sql_string):try:cursor = self.cursorcursor.execute(sql_string)self.conn.commit()self.cursor.close()self.conn.close()except pymysql.Error as e:print("mysql execute error:", e)raisedef main():conn_dict = {'host': '127.0.0.1', 'port': 3306, 'user': '******', 'password': '******', 'db': 'test', 'charset': 'utf8'}conn = DBTool(conn_dict)sql_gettables = "select table_name from information_schema.`TABLES` WHERE TABLE_SCHEMA = 'databas_name';"list = conn.execute_query(sql_gettables)# 文件目标路径,如果不存在,新建一个mysql_file_path = 'D:\mysqlscript'if not os.path.exists(mysql_file_path):os.mkdir(mysql_file_path)mysqldump_commad_dict = {'dumpcommad': 'mysqldump --no-data ', 'server': '127.0.0.1', 'user': '******','password': '******', 'port': 3306, 'db': 'databse_name'}if list:for row in list:print(row[0])# 切换到新建的文件夹中
            os.chdir(mysql_file_path)#表名dbtable = row[0]#文件名exportfile =  row[0] + '.sql'# mysqldump 命令sqlfromat = "%s -h%s -u%s -p%s -P%s %s %s >%s"# 生成相应的sql语句sql = (sqlfromat % (mysqldump_commad_dict['dumpcommad'],mysqldump_commad_dict['server'],mysqldump_commad_dict['user'],mysqldump_commad_dict['password'],mysqldump_commad_dict['port'],mysqldump_commad_dict['db'],dbtable,exportfile))print(sql)result = os.system(sql)if result:print('export ok')else:print('export fail')if __name__ == '__main__':main()

建库测试

create database test_database
charset utf8mb4 collate utf8mb4_bin;use test_database;create table table_a
(id int auto_increment not null,name varchar(100) unique,create_date datetime,primary key pk_id(id),index idx_create_date(create_date)
);insert into table_a(name,create_date) values ('aaaaaa',now());
insert into table_a(name,create_date) values ('bbbbbb',now());create table table_b
(id int auto_increment not null,name varchar(100) unique,create_date datetime,primary key pk_id(id),index idx_create_date(create_date)
);
insert into table_b(name,create_date) values ('aaaaaa',now());
insert into table_b(name,create_date) values ('bbbbbb',now());

执行的时候会提示一个警告,但是不影响最终的结果

mysqldump: [Warning] Using a password on the command line interface can be insecure.

导出建表语句会根据表的数据情况编号自增列,这是mysqldump的问题而不是导出的问题,如果有必要可以需求做相应的修改

去掉mysqldump导出表结构中备注信息

import osfilepath = "D:\\mysqlscript"
# 切换到新建的文件夹中
os.chdir(filepath)
pathDir = os.listdir(filepath)
for file in pathDir:lines = open(file, "r")content = "use ***;"content = content + "\n"for line in lines:print(line)if not (str(line).startswith("--") or str(line).startswith("/*") ):if(line!="\n" and str(line).startswith(") ENGINE")):content = content +"\n"+ ")"else:content = content + line#将提炼后的内容重新写入文件print(content)fp = open(file, 'w')fp.write(content)fp.close()

转载于:https://www.cnblogs.com/wy123/p/7903275.html

Python导出MySQL数据库中表的建表语句到文件相关推荐

  1. postgres 命令行建数据库表_Postgresql 查看建表语句 命令

    Mysql查看建表语句以及修改引擎 更多内容推荐微信公众号,欢迎关注: 1 查看系统支持的存储引擎 show engines; 2 查看表使用的存储引擎 两种方法: a.show table stat ...

  2. mysql分片建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  3. mysql hive 建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  4. PowerDesigner,如何将Oracle数据库建表语句转化成Mysql数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Oracle数 ...

  5. PowerDesigner,如何将Mysql数据库建表语句转化成Oracle数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Mysql数据 ...

  6. Python自动生成MySQL建表语句脚本

    1.pycharm工具创建一个python文件 2.把下边python代码复制 到 刚创建的python文件中 # 作者:张航铭 # 时间:2022-05-24import xlrd, os def ...

  7. python脚本-通过数据库建表语句生成表格

    python脚本-通过数据库建表语句生成表格 文章目录 python脚本-通过数据库建表语句生成表格 获取数据库建表sql ,需要带备注COMMENT 把sql复制进txt文档,编写python脚本 ...

  8. 数据库mysql自建模拟购物系统(建表语句、检索语句)

    题目:购物系统数据库设计 一.场景描述 随着互联网的普及,越来越多的人选择网上购物.购物系统已经成为了必然趋势,购物系统的主要资源是商品.商品由用户从网上查看价格.品质.评论等选择商品,用户下单付款后 ...

  9. java生成mysql数据库建表语句、字段、字段类型、字段注释,可实现不用mysqldump备份数据库

    使用 mysqldump 备份数据库也是可行的,因为每次备份的时候都需要mysqldump这个文件, 我在windows备份时没问题,但是放到linux上面时,centos系统死活不认这个文件,但又不 ...

最新文章

  1. android 拖动的view,Android实现随意拖动View效果
  2. maven的启动类和MAVEN_OPTS参数
  3. kmemleak的使用---内存泄露检测工具【转】
  4. HttpClient基础教程
  5. 超图桌面版打开外部矢量文件
  6. 使用Code First Migrations依据代码更新数据库结构
  7. 近期知识图谱顶会论文推荐,另附超详笔记解读
  8. SAP CRM and C4C PDF print
  9. loop 伪设备 挂在文件系统
  10. CCF大专委2019年大数据发展趋势预测
  11. html显示pcd,PCD5043 Datasheet(数据表) 10 Page - NXP Semiconductors
  12. HDU 2955 Robberies(概率DP,01背包)题解
  13. 全网首发:WINDOWS主机与MAC虚拟机文件访问的解决办法
  14. Oracle数据库学习笔记(四)--Oracle体系结构
  15. C语言实现一个简单的矩阵运算器
  16. 游戏服务器更新文件,如何配置网吧游戏更新服务器
  17. linux戒游戏下载,苍月之戒手游下载-苍月之戒公测版v1.0-Linux公社
  18. 循序渐进学Java day1
  19. 17、Java基础---接口
  20. [kotlin]人工智能对话程序

热门文章

  1. python实习内容过程_「Python实践」学习之路
  2. php 网路io是什么意思,io接口位于什么和什么之间
  3. javapythonc就业人数比例_P100 统计各年龄段的人数
  4. 如何查看oracle死鎖,怎么查看oracle是否有死鎖
  5. java中的saturn_Saturn分布式调度平台系列:高屋建瓴之设计原理简析
  6. 用python写聊天机器人_用Python 写一个机器人陪你聊天(文尾有彩蛋)
  7. ggplot2作图详解:主题(theme)设置
  8. android 通过usb验证应用,Linux应用可通过USB访问Android设备-Chrome OS 75版发布
  9. 三百行python代码的项目_300行Python代码打造实用接口测试框架
  10. C语言:有N个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课程的成绩),计算出平均成绩,将原有数据和计算出的平均成绩存放在磁盘文件stu_list.txt中。