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

发布时间 - 2025-07-12 00:00:00    点击率:

为了进行数据对象的版本控制,将mysql数据库中的表结构导出成文件进行版本化管理是非常重要的。以下是一个经过伪原创处理的python脚本,用于实现这一功能,同时保留了原来的功能和逻辑。

# -*- coding: utf-8 -*-
import os
import pymysql

class DatabaseManager: connection = None cursor = None

def __init__(self, connection_params):
    self.connection = pymysql.connect(
        host=connection_params['host'],
        port=connection_params['port'],
        user=connection_params['user'],
        passwd=connection_params['password'],
        db=connection_params['db'],
        charset=connection_params['charset']
    )
    self.cursor = self.connection.cursor()

def run_query(self, sql_string):
    try:
        with self.cursor as cursor:
            cursor.execute(sql_string)
            results = cursor.fetchall()
        self.connection.close()
        return results
    except pymysql.Error as error:
        print("MySQL query error:", error)
        raise

def run_non_query(self, sql_string):
    try:
        with self.cursor as cursor:
            cursor.execute(sql_string)
        self.connection.commit()
        self.connection.close()
    except pymysql.Error as error:
        print("MySQL non-query error:", error)
        raise

def main(): connection_params = { 'host': '127.0.0.1', 'port': 3306, 'user': '**', 'password': '**', 'db': 'test', 'charset': 'utf8' } db_manager = DatabaseManager(connection_params) sql_get_tables = "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'database_name';" tables = db_manager.run_query(sql_get_tables)

# 定义文件目标路径,如果路径不存在,则创建
export_path = 'D:\\mysqlscript'
if not os.path.exists(export_path):
    os.mkdir(export_path)

mysqldump_params = {
    'dump_command': 'mysqldump --no-data ',
    'server': '127.0.0.1',
    'user': '******',
    'password': '******',
    'port': 3306,
    'db': 'database_name'
}

if tables:
    for table in tables:
        print(table[0])
        os.chdir(export_path)
        table_name = table[0]
        export_file = f"{table_name}.sql"
        sql_format = "%s -h%s -u%s -p%s -P%s %s %s youjiankuohaophpcn%s"
        sql_command = sql_format % (
            mysqldump_params['dump_command'],
            mysqldump_params['server'],
            mysqldump_params['user'],
            mysqldump_params['password'],
            mysqldump_params['port'],
            mysqldump_params['db'],
            table_name,
            export_file
        )
        print(sql_command)
        result = os.system(sql_command)
        if result == 0:
            print('导出成功')
        else:
            print('导出失败')

if name == 'main': main()

数据库测试脚本:

CREATE DATABASE test_database CHARACTER SET 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工具本身的问题,如果需要,可以进行相应的修改。

移除mysqldump导出表结构中的注释信息:

import os

export_path = "D:\mysqlscript" os.chdir(export_path) files = os.listdir(export_path) for file in files: with open(file, "r") as f: content = "USE **;\n" for line in f: if not (line.startswith("--") or line.startswith("/")): if line != "\n" and line.startswith(") ENGINE"): content += "\n" + ")" else: content += line print(content) with open(file, 'w') as f: f.write(content)

通过以上脚本,您可以轻松地将MySQL数据库中的表结构导出到文件中,并进行版本控制管理。


# css  # mysql  # python  # 工具  # ai  # python脚本 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用腾讯建站主机快速创建免费网站?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  Laravel如何创建自定义Facades?(详细步骤)  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何快速生成凡客建站的专业级图册?  教你用AI润色文章,让你的文字表达更专业  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  如何用JavaScript实现文本编辑器_光标和选区怎么处理  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel distinct去重查询_Laravel Eloquent去重方法  jQuery validate插件功能与用法详解  免费网站制作appp,免费制作app哪个平台好?  Laravel怎么判断请求类型_Laravel Request isMethod用法  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Python制作简易注册登录系统  如何在服务器上配置二级域名建站?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何在云主机上快速搭建网站?  如何快速搭建FTP站点实现文件共享?  网站制作报价单模板图片,小松挖机官方网站报价?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel如何实现事件和监听器?(Event & Listener实战)  javascript基于原型链的继承及call和apply函数用法分析  长沙做网站要多少钱,长沙国安网络怎么样?  如何快速配置高效服务器建站软件?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  香港服务器网站卡顿?如何解决网络延迟与负载问题?  微信小程序 配置文件详细介绍  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  如何自定义建站之星模板颜色并下载新样式?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  如何用免费手机建站系统零基础打造专业网站?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何在宝塔面板创建新站点?  如何快速使用云服务器搭建个人网站?  个人网站制作流程图片大全,个人网站如何注销?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  5种Android数据存储方式汇总  网页设计与网站制作内容,怎样注册网站?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  高性价比服务器租赁——企业级配置与24小时运维服务