当前位置: 首页> 科技> 数码 > 装修招标网站_徐州做网站建设_深圳招聘网络推广_大数据获客系统

装修招标网站_徐州做网站建设_深圳招聘网络推广_大数据获客系统

时间:2025/9/14 17:28:48来源:https://blog.csdn.net/u011564831/article/details/143804440 浏览次数:0次
装修招标网站_徐州做网站建设_深圳招聘网络推广_大数据获客系统

主要需求从一个 MySQL 数据库(源数据库)同步表结构到另一个 MySQL 数据库(目标数据库)。具体而言,它会从源数据库中获取每个表的创建 SQL 语句,并在目标数据库中执行这些语句,以创建相同的表结构。不依赖navicat可以用下面脚本很方便的进行同步

步骤分解

  1. 导入必要的库

    import mysql.connector
    

    这里导入了 mysql.connector,这是一个用于连接 MySQL 数据库的 Python 库。

  2. 数据库连接配置

    source_db_config = {'host': 'xxx','port': 32562,'user': 'root','password': 'xxx','database': 'xxx'
    }target_db_config = {'host': 'xxx','port': 30653,'user': 'root','password': 'xxx','database': 'xxx'
    }
    
    • 这里定义了两个字典 source_db_configtarget_db_config,分别包含源数据库和目标数据库的连接信息。
    • 包括主机地址、端口、用户名、密码和数据库名称。
  3. 获取表结构的函数

    def get_table_structure(cursor, table_name):cursor.execute(f"SHOW CREATE TABLE {table_name};")result = cursor.fetchone()return result[1]  # 获取创建表的 SQL 语句
    
    • 该函数接受一个数据库游标和表名作为参数。
    • 使用 SHOW CREATE TABLE SQL 语句获取指定表的创建 SQL 语句,并返回该语句。
  4. 同步表结构的函数

    def sync_table_structure(source_cursor, target_cursor, table_name):create_table_sql = get_table_structure(source_cursor, table_name)try:target_cursor.execute(f"DROP TABLE IF EXISTS {table_name};")  # 可选:先删除目标表target_cursor.execute(create_table_sql)print(f"表 {table_name} 结构已同步。")except mysql.connector.Error as err:print(f"表 {table_name} 同步失败: {err}")
    
    • 此函数用于从源数据库获取表结构并在目标数据库中创建相同的表。
    • 首先调用 get_table_structure 获取创建表的 SQL 语句。
    • 然后执行 DROP TABLE IF EXISTS 以删除目标数据库中已存在的同名表(这一操作是可选的)。
    • 最后,使用获取的 SQL 语句在目标数据库中创建表,并在控制台输出同步状态。
    • 如果在执行过程中出现错误,会捕获并打印错误信息。
  5. 主逻辑函数

    def main():# 连接源数据库source_conn = mysql.connector.connect(**source_db_config)source_cursor = source_conn.cursor()# 连接目标数据库target_conn = mysql.connector.connect(**target_db_config)target_cursor = target_conn.cursor()# 获取源数据库中的所有表source_cursor.execute("SHOW TABLES;")tables = source_cursor.fetchall()for (table_name,) in tables:sync_table_structure(source_cursor, target_cursor, table_name)# 关闭连接source_cursor.close()source_conn.close()target_cursor.close()target_conn.close()
    
    • main 函数是程序的入口点。
    • 首先,连接源和目标数据库,并创建相应的游标。
    • 使用 SHOW TABLES; 查询获取源数据库中的所有表名。
    • 对于每个表,调用 sync_table_structure 进行结构同步。
    • 最后,关闭所有游标和连接以释放资源。

完整脚本

import mysql.connector# MySQL 配置
source_db_config = {'host': '192.168.110.xx','port': 32562,'user': 'root','password': 'xxx','database': 'xxx'
}target_db_config = {'host': '192.168.110.xxx2','port': 30653,'user': 'root','password': 'xx','database': 'xx'
}def get_table_structure(cursor, table_name):cursor.execute(f"SHOW CREATE TABLE {table_name};")result = cursor.fetchone()return result[1]  # 获取创建表的 SQL 语句def sync_table_structure(source_cursor, target_cursor, table_name):create_table_sql = get_table_structure(source_cursor, table_name)try:# 在目标数据库中执行创建表的 SQLtarget_cursor.execute(f"DROP TABLE IF EXISTS {table_name};")  # 可选:先删除目标表target_cursor.execute(create_table_sql)print(f"表 {table_name} 结构已同步。")except mysql.connector.Error as err:print(f"表 {table_name} 同步失败: {err}")def main():# 连接源数据库source_conn = mysql.connector.connect(**source_db_config)source_cursor = source_conn.cursor()# 连接目标数据库target_conn = mysql.connector.connect(**target_db_config)target_cursor = target_conn.cursor()# 获取源数据库中的所有表source_cursor.execute("SHOW TABLES;")tables = source_cursor.fetchall()for (table_name,) in tables:sync_table_structure(source_cursor, target_cursor, table_name)# 关闭连接source_cursor.close()source_conn.close()target_cursor.close()target_conn.close()if __name__ == "__main__":main()

后面就不赘述同步完检查了

关键字:装修招标网站_徐州做网站建设_深圳招聘网络推广_大数据获客系统

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: