Python导出MySQL数据库中表的建表语句到文件
发布时间 - 2025-07-12 00:00:00 点击率:次为了进行数据对象的版本控制,将mysql数据库中的表结构导出成文件进行版本化管理是非常重要的。以下是一个经过伪原创处理的python脚本,用于实现这一功能,同时保留了原来的功能和逻辑。
# -*- coding: utf-8 -*- import os import pymysqlclass 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) raisedef 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.
TABLESWHERE 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 osexport_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小时运维服务


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)