回答

收藏

SQlite如何转为MySql

后台知识 后台知识 446 人阅读 | 0 人回复 | 2024-06-28


有客户要导数据,结果是SQlite用不了,navicat也导不了,找了很多工具,不是收费就是用不了,能转的工具最后导入还是会报错,索性自己写了一个。
改一下配置,保存为.py格式,放到sql同级目录,使用python直接运行即可,无需导包,保存好:
def SQliteToSql(charset='utf-8'):
    """
    将SQLite数据库的建表语句转换为MySql兼容的格式。
    参数:
    charset: 字符集,默认为'utf-8'。
    """
    i = 1
    with open(input_file, 'r', encoding=charset) as file_in, open(output_file, 'w', encoding='utf-8') as file_out:
        for line in file_in:
            # 对每一行进行处理(示例:转换为大写)
            if replace_str in line:
                processed_line = line.replace(replace_str, replace_new)  # 插入表语法替换
                processed_line = processed_line.replace("\\''", '"')  # 单引号转换
            else:
                processed_line = line.replace('"', '')
                processed_line = processed_line.replace(delete_str, '')
                processed_line = processed_line.replace(delete_str2, '')
                processed_line = processed_line.replace('NUMBER(', 'INT(')  # 存储数据类型转换
                processed_line = processed_line.replace('DATE(10)', 'text(225)')  # 存储数据类型转换
                processed_line = processed_line.replace('filesize NUMBER(50)', 'filesize text(225)')  # 存储数据类型转换
            if i % 3000 == 0:
                print(i)  # 打印计数
            i += 1

            # 将处理后的行写入输出文件
            file_out.write(processed_line)


# 配置
input_file = 'ZHBKV5.sql'  # 源文件
output_file = 'ZHBKV5_new.sql'  # 新文件
table_name = 'ZHBKV5'  # 要操作的表名

# =============================你无需更改================================================
# 插入语法替换,更换表名即可
replace_str = f'INSERT INTO "{table_name}" VALUES'
replace_new = f'INSERT INTO {table_name} VALUES'
delete_str = "PRAGMA foreign_keys = false;"
delete_str2 = "PRAGMA foreign_keys = true;"
SQliteToSql()
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

65 积分
15 主题
+ 关注