python脚本-通过数据库建表语句生成表格

python脚本-通过数据库建表语句生成表格

获取数据库建表sql ,需要带备注COMMENT

xi2RAA.png

 `sessionId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户会话id',
  `login_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '登录账号',
  `dept_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '部门名称',
  `ipaddr` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '登录IP地址',
  `login_location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '登录地点',
  `browser` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '浏览器类型',
  `os` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '操作系统',
  `status` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '在线状态on_line在线off_line离线',
  `start_timestamp` datetime DEFAULT NULL COMMENT 'session创建时间',
  `last_access_time` datetime DEFAULT NULL COMMENT 'session最后访问时间',
  `expire_time` int(5) DEFAULT '0' COMMENT '超时时间,单位为分钟',

把sql复制进txt文档,编写python脚本

file = open("struct.txt ",encoding='UTF-8')

lines = file.readlines()

for line in lines:
    contents = line.split(' ')
    for i in range(len(contents) - 1, -1, -1):
        if not contents[i].strip():
            contents.pop(i)
    print(contents[0][1:-1], end='\t')
    if contents[-1][0] == "'":
        print(contents[-1].strip()[1:-2], end='\t')
    elif contents[-2][0] == "'":
        print(contents[-2][1:] + contents[-1].strip()[:-2], end='\t')
    else:
        left = -1
        right = 0
        while contents[left][0] != "'":
            left -= 1
        print(contents[left][1:], end='')
        for i in range(left + 1, -1):
            print(contents[i], end='')
        print(contents[-1].strip()[:-2], end='\t')
    print(contents[1], end='\t')
    if 'NOT' in contents:
        print('NOT NULL', end='\t')
    else:
        print(' \t', end='')
    print(' \t')

xiRCB4.png

执行,控制台生成固定格式字段信息,粘贴到需要的文档

xiRV9x.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这是一段将MySQL建表语句转换为PostgreSQL建表语句Python脚本,包含索引: ```python def mysql_to_postgresql(mysql_query): # 将 MySQL 建表语句转换为 PostgreSQL 建表语句 postgres_query = mysql_query.replace("INT", "INTEGER") \ .replace("AUTO_INCREMENT", "SERIAL") \ .replace("DEFAULT '0000-00-00'", "") \ .replace("DEFAULT '0'", "") \ .replace("ENGINE=InnoDB", "") \ .replace("VARCHAR", "VARCHAR(255)") \ .replace("PRIMARY KEY", "PRIMARY KEY") \ .replace("UNSIGNED", "") \ .replace("COMMENT '", "COMMENT '") \ .replace("`", "\"") # 处理索引 index_start = postgres_query.find("KEY ") while index_start != -1: index_end = postgres_query.find(",", index_start) if index_end == -1: index_end = postgres_query.find(")", index_start) index_name = postgres_query[index_start:index_end].replace("`", "").replace("KEY ", "\"").replace("(", "_").replace(")", "\"") postgres_query = postgres_query[:index_start] + "CONSTRAINT " + index_name + " " + postgres_query[index_start:index_end] + postgres_query[index_end:] index_start = postgres_query.find("KEY ", index_end) return postgres_query ``` 使用方法: ```python mysql_query = "CREATE TABLE `users` (`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(50) NOT NULL, `age` INT UNSIGNED NOT NULL, `email` VARCHAR(100) NOT NULL, INDEX (`name`))" postgres_query = mysql_to_postgresql(mysql_query) print(postgres_query) ``` 输出结果: ``` CREATE TABLE "users" ("id" INTEGER SERIAL PRIMARY KEY, "name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL, "email" VARCHAR(100) NOT NULL, CONSTRAINT "name_index" INDEX ("name")) ``` 注意事项: - 该脚本只对一些常见的 MySQL 数据类型和建表语句进行了转换,如果您的 MySQL 建表语句涉及到其他数据类型或特殊语法,可能需要对脚本进行修改。 - 索引的处理方式是将 MySQL 的 KEY 转换为 PostgreSQL 的 CONSTRAINT INDEX,索引名称的生成方式是将 KEY 后面的字段名(如果有)加上下划线作为索引名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厌世小晨宇yu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值