首页 > 数据库 >python批量修改mysql中某个字段的长度

python批量修改mysql中某个字段的长度

时间:2024-11-22 16:18:48浏览次数:1  
标签:name python fields cursor column 字段 mysql table null

突然被告知DB中某个关键字段长度要增大,涉及到N张表,改起来超麻烦,想着用代码改,比较少写这种增删表或者改变表结构的代码,记录下。

import pymysql


def modifyFieldVarcharLen(config, new_column_length):

    connection = pymysql.connect(**config)
    try:
        with connection.cursor() as cursor:

            # 获取所有表的名字
            cursor.execute("SHOW TABLES")
            tables = cursor.fetchall()
            table_fields = {}

            for table in tables:
                table_name = table[0]

                # 获取表的字段信息
                cursor.execute(f"DESCRIBE `{table_name}`")
                fields = cursor.fetchall()

                def_fields = ("field1", "field2", "field3")

                for field in fields:
                    field_l = field[0].lower()
                    if field_l in def_fields:
                        if table_name in table_fields:
                            table_fields[table_name].append(field[0])
                        else:
                            table_fields[table_name] = [field[0]]

            for table_name in table_fields:
                for column_name in table_fields[table_name]:
                    # 查询原字段的注释和默认值
                    cursor.execute(f"SHOW FULL COLUMNS FROM `{table_name}` WHERE Field = %s;", (column_name,))
                    column_info = cursor.fetchone()

                    collation = column_info[2]
                    is_null = column_info[3]
                    default_value = column_info[5]
                    comment = column_info[8]
                    # print(column_info)
                    # print(collation, is_null, comment, default_value, default_value is None)

                    if is_null == "YES" and default_value is None:
                        null_str = "NULL DEFAULT NULL"
                    elif is_null == "YES" and default_value is not None:
                        null_str = f"NULL DEFAULT '{default_value}'"
                    elif is_null == "NO" and default_value is not None:
                        null_str = f"NOT NULL DEFAULT '{default_value}'"
                    else:
                        null_str = "NOT NULL"

                    sql = f"ALTER TABLE `{table_name}` MODIFY COLUMN `{column_name}` VARCHAR({new_column_length}) {null_str} COMMENT '{comment}' COLLATE '{collation}';"
                    cursor.execute(sql)
                    print(sql)

                    connection.commit()
    finally:
        connection.close()


def batchModifyColumns():
    length = 50
    configs = [{"host": "localhost", "user": "root", "password": "", "database": "test2"}]
    table_fields = [
        {
            "table1": ["field1"],
            "table2": ["field1"],
            "table3": ["field1", "field2"],
            "table4": ["field2"],
            "table5": ["field2"],
        }
    ]

    length_c = len(configs)
    for i in range(length_c):
        modifyFieldVarcharLen(config=configs[i], new_column_length=length)


batchModifyColumns()

可以实现批量修改某些varchar字段的长度,保留原字段是否为null、默认值、注释、编码等信息

标签:name,python,fields,cursor,column,字段,mysql,table,null
From: https://www.cnblogs.com/caroline2016/p/18563092

相关文章

  • 【MySQL主从复制】揭秘高效数据库架构,轻松应对大数据挑战!
    MySQL主从复制概述MySQL主从复制是一种数据复制技术,用于将一个MySQL数据库服务器(主库)的数据实时复制到一个或多个MySQL数据库服务器(从库)。这种机制常用于实现读写分离、负载均衡和数据备份等目的。主从复制的基本步骤配置主库:在主库上启用二进制日志,并创建一个具有复......
  • 超全!python中字符串拼接的各种姿势
    Python提供了多种字符串拼接的方式,每种方式在性能、可读性和灵活性上各有特点。以下是常见的字符串拼接方式及其总结:1.使用+操作符s1="Hello"s2="World"result=s1+""+s2#HelloWorld特点:简单易懂,适合小规模拼接。多个+拼接可能生成多个中间字符......
  • Python 初学者的学习指南:从入门到实践 ---亲身经历版本!!!
    前言Python因其简单易学、功能强大而成为初学者编程的首选语言。无论你是零基础的小白,还是想拓展技能的开发者,Python都能为你提供无限可能。本篇博客将为Python初学者提供一套学习方法和学习路线,帮助你在短时间内掌握Python编程的核心知识,并学以致用。学习方法明......
  • mysql一次性写入大量数据的时候报错
     修改mysql配置参数解释1、innodb_buffer_pool_size=8G作用: 这是InnoDB存储引擎用于缓存表和索引数据的内存区域大小。 数据库主要从内存中读取数据而非磁盘,因此该值越大,系统性能越好(特别是对于大数据量的场景)。初始值: MySQL5.7及以下:通常为128MB。 ......
  • 基于Python的人事管理系统
    作者:计算机学姐开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选......
  • 学习Python Day8
    1.列表1.1优点可以存储多个数据,且可以是不同数据类型1.2常用操作1.2.1查找1.2.1.1下标list1=['apple','orange','banana']print(list1[0])print(list1[1])print(list1[2])1.2.1.2函数index():返回数据的下标,如果不存在,则报错list1=['apple','orange'......
  • 免费送源码:Java+django+MySQL django 教师培训反馈系统 计算机毕业设计原创定制
           目   录摘  要IAbstractII第1章  前  言31.1 研究背景31.2 研究现状31.3 系统开发目标3第2章  系统开发环境62.1HTTP协议62.2HTML网页技术62.3B/S结构62.4django脚本语言72.5MySQL数据库72.6Apache简介8第......
  • 毕业论文设计 Python实现基于改进的鲸鱼优化算法(IWOA)和门控循环单元(GRU)进行时间序列预
    目录Python实现基她改进她鲸鱼优化她法(UZIWOA)和门控循环单元(GTT)进行时间序列预测模型她详细项目实例    2项目背景介绍...2项目目标她意义...2项目目标:...2项目意义:...3项目挑战...3项目特点她创新...3项目应用领域...3项目效果预测图她程序设计...4项......
  • 毕业论文设计 Python 实现基于WGAN的生成对抗网络数据生成的详细项目实例
    目录Python实现基她WGAN她生成对抗网络数据生成她详细项目实例...5项目背景介绍...5一、引言...5二、WGAN背景及优势...51.生成对抗网络(GAN)简述...52.WGAN她核心创新:Wattestterzin距离...63.1-李普希茨条件她权重裁剪...6项目目标...61. 构建高质量她数......
  • 毕业论文设计 Python 实现基于SSA-CNN-LSTM麻雀算法优化卷积长短期记忆神经网络进行时
    目录Python实现基爱她TTA-CNN-LTTM麻雀算法优化卷积长短期记忆神经网络进行时间序列预测模型爱她详细项目实例    4项目背景介绍...4项目目标...5提升预测精度...5实现自动化优化...5提升模型爱她泛化能力...5提高计算效率...5项目意义...5创新算法应用.......