【Python】批量修改数据库表的字段类型脚本

下面是批量修改数据库表字段类型,如批量把clob改成nclob:

import cx_Oracle

# 设置数据库连接信息
username = 'db_username'
password = 'your_password'  # 请替换为实际的数据库密码
dsn = 'your_dsn'  # 请替换为实际的数据库DSN

# 创建数据库连接
connection = cx_Oracle.connect(username, password, dsn)

# 定义要修改的字段类型
oldType = 'CLOB'
newType = 'NCLOB'

# 查询包含CLOB字段的表信息
cursor = connection.cursor()
sql = f"""SELECT OWNER,
                 TABLE_NAME,
                 COLUMN_NAME,
                 DATA_TYPE,
                 DATA_LENGTH AS COLUMN_LENGTH
          FROM ALL_TAB_COLUMNS
          WHERE OWNER = UPPER('{username}') AND DATA_TYPE = '{oldType}'"""
cursor.execute(sql)
result = cursor.fetchall()

if not result:
    print(f"不存在包含类型【{oldType}】的表字段!")
else:
    for row in result:
        tablename = row[1]
        columnname = row[2]
        ret = updateColumn(connection, tablename, columnname, oldType, newType)
        
        if ret == 1:
            print(f"更新【{tablename}】->【{columnname}】成功->{ret}")
        else:
            print(f"更新【{tablename}】->【{columnname}】失败->{ret}")
        
        print('\r\n')

print("*******end********")

# 修改字段类型的函数
def updateColumn(connection, tablename, columnname, oldType, newType):
    cursor = connection.cursor()
    try:
        # 重命名旧字段
        rename_sql = f"ALTER TABLE {tablename} RENAME COLUMN {columnname} TO {columnname}_0"
        cursor.execute(rename_sql)
        
        # 添加新字段
        add_column_sql = f"ALTER TABLE {tablename} ADD {columnname} {newType}"
        cursor.execute(add_column_sql)
        
        # 更新原来的值
        update_sql = f"UPDATE {tablename} SET {columnname} = {columnname}_0"
        cursor.execute(update_sql)
        
        # 删除旧字段
        drop_sql = f"ALTER TABLE {tablename} DROP COLUMN {columnname}_0"
        cursor.execute(drop_sql)
        
        connection.commit()
        return 1
    except cx_Oracle.Error as e:
        print(f"更新【{tablename}】->【{columnname}】失败->{e}")
        connection.rollback()
        return 0
    finally:
        cursor.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值