• 三个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3


    一个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3,创建的是FTS4的虚拟表

    # -*- coding:utf-8 -*-
    import json
    import sqlite3
    import os,  sys
    
    def join_key_by_dict(dict_info):
        result = ""
        for item in dict_info.keys():
            result += item + ','
        result = result.rstrip(',')
        return result
    
    def join_value_by_dict(dict_info):
        result = ""
        for item in dict_info.keys():
            if isinstance(dict_info[item], str):
                result += "'" + dict_info[item].replace("'",  "''") + "',"
            else:
                result += str(dict_info[item]) + ","
            # result += dict_info[item] + ','
        result = result.rstrip(',')
        return result
    
    def create_tbl_by_json(json_file,  tbl_name,  db_conn):
        # 打开文件,
        json_handle = open(json_file,  "r")
        # 读取第一行,转换成json数据
        line = json_handle.readline()
        json_handle.close()
    
        # 清除左边的[,右边的,
        line = line.lstrip('[').rstrip('
     ,')
    
        json_line = json.loads(line)
        # 获取到所有key,构建表的创建命令
        create_tbl_str = "create virtual table %s USING fts4( %s );" % (tbl_name,  join_key_by_dict(json_line))
    
        # 打开光标
        cur = db_conn.cursor()
        cur.execute(create_tbl_str)
        db_conn.commit()
        cur.close()
        print('create %s table success[%s]' % (tbl_name,  json_file) )
    
    def insert_record_by_json(json_file, tbl_name,  db_conn):
        # 打开文件,
        json_handle = open(json_file,  "r")
        # 读取第一行,转换成json数据
        cur = db_conn.cursor()
        count = 0
        for line in json_handle:
            json_line = json.loads(line.lstrip('[').rstrip('
     ,]'))
            # 获取到所有key,构建表的创建命令
            key_str = join_key_by_dict(json_line)
            val_str = join_value_by_dict(json_line)
            # 组装命令并执行
            insert_record_str = "INSERT INTO %s (%s) VALUES(%s);" % (tbl_name,  key_str, val_str)
            cur.execute(insert_record_str)
            count += 1
        db_conn.commit()
        cur.close()
        json_handle.close()
        print('insert record finish, count: %s' % count )
    
    def convert_json_to_db(json_file,  db_file):
        # 检查json_file是否存在
        if not os.path.exists(json_file):
            print('file not exist: %s' % json_file)
            return
    
        # 打开数据库连接
        db_conn = sqlite3.connect(db_file)
    
        tbl_name,  _ = os.path.splitext(os.path.basename(json_file))
        # 开始创建表
        create_tbl_by_json(json_file,  tbl_name,  db_conn)
    
        # 开始插入记录
        insert_record_by_json(json_file,  tbl_name,  db_conn)
    
        # 关闭数据库
        db_conn.close()
        print('Operation done successfully')
    
    if __name__ == '__main__':
        if len(sys.argv) != 3:
            print('Usage: python %s json_file db_file' % os.path.basename(__file__))
            exit(1)
        json_file = sys.argv[1]
        db_file = sys.argv[2]
        convert_json_to_db(json_file,  db_file)
    

    一个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3,创建的是通用表

    # -*- coding:utf-8 -*-
    import json
    import sqlite3
    import os,  sys
    
    def join_key_by_dict(dict_info):
        result = ""
        for item in dict_info.keys():
            result += item + ','
        result = result.rstrip(',')
        return result
    
    def join_value_by_dict(dict_info):
        result = ""
        for item in dict_info.keys():
            if isinstance(dict_info[item], str):
                result += "'" + dict_info[item].replace("'",  "''") + "',"
            else:
                result += str(dict_info[item]) + ","
            # result += dict_info[item] + ','
        result = result.rstrip(',')
        return result
    
    def join_keyvalue_by_dict(dict_info):
        result = ""
        for item in dict_info.keys():
            if isinstance(dict_info[item], int):
                result += str(item) + " INTEGER,"
            else:
                result += str(item) + " TEXT,"
            # result += dict_info[item] + ','
        result = result.rstrip(',')
        return result
    
    def create_tbl_by_json(json_file,  tbl_name,  db_conn):
        # 打开文件,
        json_handle = open(json_file,  "r")
        # 读取第一行,转换成json数据
        line = json_handle.readline()
        json_handle.close()
    
        # 清除左边的[,右边的,
        line = line.lstrip('[').rstrip('
     ,')
    
        json_line = json.loads(line)
        # 获取到所有key,构建表的创建命令
        create_tbl_str = "create table %s (%s);" % (tbl_name,  join_keyvalue_by_dict(json_line))
    
        # 打开光标
        cur = db_conn.cursor()
        cur.execute(create_tbl_str)
        db_conn.commit()
        cur.close()
        print('create %s table success[%s]' % (tbl_name,  json_file) )
    
    def insert_record_by_json(json_file, tbl_name,  db_conn):
        # 打开文件,
        json_handle = open(json_file,  "r")
        # 读取第一行,转换成json数据
        cur = db_conn.cursor()
        count = 0
        for line in json_handle:
            json_line = json.loads(line.lstrip('[').rstrip('
     ,]'))
            # 获取到所有key,构建表的创建命令
            key_str = join_key_by_dict(json_line)
            val_str = join_value_by_dict(json_line)
            # 组装命令并执行
            insert_record_str = "INSERT INTO %s (%s) VALUES(%s);" % (tbl_name,  key_str, val_str)
            cur.execute(insert_record_str)
            count += 1
        db_conn.commit()
        cur.close()
        json_handle.close()
        print('insert record finish, count: %s' % count )
    
    def convert_json_to_db(json_file,  db_file):
        # 检查json_file是否存在
        if not os.path.exists(json_file):
            print('file not exist: %s' % json_file)
            return
    
        # 打开数据库连接
        db_conn = sqlite3.connect(db_file)
    
        tbl_name,  _ = os.path.splitext(os.path.basename(json_file))
        # 开始创建表
        create_tbl_by_json(json_file,  tbl_name,  db_conn)
    
        # 开始插入记录
        insert_record_by_json(json_file,  tbl_name,  db_conn)
    
        # 关闭数据库
        db_conn.close()
        print('Operation done successfully')
    
    if __name__ == '__main__':
        if len(sys.argv) != 3:
            print('Usage: python %s json_file db_file' % os.path.basename(__file__))
            exit(1)
        json_file = sys.argv[1]
        db_file = sys.argv[2]
        convert_json_to_db(json_file,  db_file)
    

      

    一个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3,输出的是可以执行的SQL语句

    # -*- coding:utf-8 -*-
    import json
    import os,  sys
    
    def join_key_by_dict(dict_info):
        result = ""
        for item in dict_info.keys():
            result += item + ','
        result = result.rstrip(',')
        return result
    
    def join_value_by_dict(dict_info):
        result = ""
        for item in dict_info.keys():
            if isinstance(dict_info[item], str):
                result += "'" + dict_info[item].replace("'",  "''") + "',"
            else:
                result += str(dict_info[item]) + ","
            # result += dict_info[item] + ','
        result = result.rstrip(',')
        return result
    
    def create_tbl_by_json(json_file,  tbl_name,  sql_file):
        # 打开文件,
        json_handle = open(json_file,  "r")
        # 读取第一行,转换成json数据
        line = json_handle.readline()
        json_handle.close()
    
        # 清除左边的[,右边的,
        line = line.lstrip('[').rstrip('
     ,')
    
        json_line = json.loads(line)
        # 获取到所有key,构建表的创建命令
        create_tbl_str = 'create virtual table %s USING fts4( %s );
    ' % (tbl_name,  join_key_by_dict(json_line))
        sql_file.write(create_tbl_str)
    
        # 打开光标
        #print('create %s table success[%s]' % (tbl_name,  json_file) )
    
    def insert_record_by_json(json_file, tbl_name,  sql_file):
        # 打开文件,
        json_handle = open(json_file,  "r")
        # 读取第一行,转换成json数据
        count = 0
        for line in json_handle:
            json_line = json.loads(line.lstrip('[').rstrip('
     ,]'))
            # 获取到所有key,构建表的创建命令
            key_str = join_key_by_dict(json_line)
            val_str = join_value_by_dict(json_line)
            # 组装命令并执行
            insert_record_str = "INSERT INTO %s (%s) VALUES(%s);
    " % (tbl_name,  key_str, val_str)
            sql_file.write(insert_record_str)
            count += 1
        json_handle.close()
        #print('insert record finish, count: %s' % count )
    
    def convert_json_to_sql(json_file,  sql_file):
        # 检查json_file是否存在
        if not os.path.exists(json_file):
            print('file not exist: %s' % json_file)
            return
    
        # 检查sql_file是否存在
        if os.path.exists(sql_file):
            print('file is exist: %s, will overwrite it.' % sql_file)
    
        # 打开文件
        sql_handle = open(sql_file, "w")
    
        tbl_name,  _ = os.path.splitext(os.path.basename(json_file))
        # 开始创建表
        create_tbl_by_json(json_file,  tbl_name,  sql_handle)
    
        # 开始插入记录
        insert_record_by_json(json_file,  tbl_name,  sql_handle)
    
        # 关闭文件
        sql_handle.close()
        print('Operation done successfully')
    
    if __name__ == '__main__':
        if len(sys.argv) != 3:
            print('Usage: python %s json_file db_file' % os.path.basename(__file__))
            exit(1)
        json_file = sys.argv[1]
        sql_file = sys.argv[2]
        convert_json_to_sql(json_file,  sql_file)
    

      

     
     
     
     
     
     
  • 相关阅读:
    UML中常用的类图元素介绍
    灵魂架构师论坛 正在崛起
    什么是模式,什么是框架
    RPG Maker XP
    php常用HEADER头记录
    PHP MYSQLI扩展库面向对象编程 数据库连接 例子
    PHP 通过MYSQL扩展库 连接MYSQL例子
    MYSQL 数据库相关操作总结
    MYSQL 客户端控制台 中文乱码
    PHP 安全编程慢慢总结
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/10402251.html
Copyright © 2020-2023  润新知