一个通用的脚本,处理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('\r\n ,') 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('\r\n ,]'))
# 获取到所有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('\r\n ,') 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('\r\n ,]'))
# 获取到所有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('\r\n ,') json_line = json.loads(line)
# 获取到所有key,构建表的创建命令
create_tbl_str = 'create virtual table %s USING fts4( %s );\n' % (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('\r\n ,]'))
# 获取到所有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);\n" % (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)

  

 
 
 
 
 
 

三个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3的更多相关文章

  1. MySQL Workbench 6 不能删除数据等问题(“Error Code: 1175”) 和入门教程

    网络资料收集 当用MySQL Workbench进行数据库的批量更新时,执行一个语句会碰到以下错误提示: Error Code: 1175 You are using safe...without a ...

  2. [笔记] MySql Workbench 导出表结构和数据报错 mysqldump: [ERROR] unknown variable 'delayed-insert=FALSE'

    下午使用MySql Workbench导出数据库表结构,设置完导出选项后执行导出,报如下错误: :: Dumping nacweixindb (tb_app) Running: mysqldump.e ...

  3. 只要三步!阿里云DLA帮你处理海量JSON数据

    概述 您可能有大量应用程序产生的JSON数据,您可能需要对这些JSON数据进行整理,去除不想要的字段,或者只保留想要的字段,或者仅仅是进行数据查询. 那么,利用阿里云Data Lake Analyti ...

  4. 利用PHP脚本辅助MySQL数据库管理5-检查异常数据

    <?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...

  5. mysql workbench 导出表结构

    Server->Data Export 选择数据库(我的是 lhc库) -> 选择对应表(我的是  device表), Dump Structre and Data 导出表数据和表结构 D ...

  6. Mysql 导入导出表结构与数据

    1.导出整个数据库 mysqldump -u用户名 -p密码  数据库名 > 导出的文件名  C:\Users\jack> mysqldump -uroot -pmysql account ...

  7. mysql只导出表结构或数据

    唯一的非导电结构指南数据 mysqldump -t 数据库名称 -uroot -p > xxx.sql 指南结构不仅指导数据 mysqldump    --opt -d  数据库名 -u -p ...

  8. MySQL Workbench的使用教程 (初级入门版)

    MySQL Workbench 是 MySQL AB 最近释放的可视数据库设计工具.这个工具是设计 MySQL 数据库的专用工具. MySQL Workbench 拥有很多的功能和特性:这篇由Djon ...

  9. (转)MySQL Workbench的使用教程 (初级入门版)

    转自:http://www.cnblogs.com/yqskj/archive/2013/03/01/2938027.html MySQL Workbench 是 MySQL AB 最近释放的可视数据 ...

随机推荐

  1. 有向图的强联通分量 Tarjan算法模板

    //白书 321页 #include<iostream> #include<cstdio> #include<cstring> #include<vector ...

  2. gulp压缩css和js

    压缩 css 代码可降低 css 文件大小,提高页面打开速度. 规律转换为 gulp 代码 找到 css/ 目录下的所有 css 文件,压缩它们,将压缩后的文件存放在 dist/css/ 目录下.一. ...

  3. Fragment+ViewPager实现仿微信点击和滑动切换界面

    这是在我写的新闻App中实现的界面切换 贴出切换界面的主要代码: xml代码: <span style="font-size:14px;"> <android.s ...

  4. HDU 5950Recursive sequence ICPC沈阳站

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. 图论:Prufer编码

    BZOJ1211:使用prufer编码解决限定结点度数的树的计数问题 首先学习一下prufer编码是干什么用的 prufer编码可以与无根树形成一一对应的关系 一种无根树就对应了一种prufer编码 ...

  6. iOS 点击cell上的按钮获取行数

    -(void)btnClick:(UIButton *)button{ UITableViewCell *cell = (UITableViewCell *)[[button superview] s ...

  7. concurrent.futures 使用及解析

    from concurrent.futures import ThreadPoolExecutor, as_completed, wait, FIRST_COMPLETED from concurre ...

  8. Type.IsAssignableFrom 方法

    方法: public virtual bool IsAssignableFrom ( Type c ) 1.如果 c 和当前 Type 表示同一类型2.当前 Type 在 c 的继承层次结构中3.当前 ...

  9. 【BZOJ】1833 [ZJOI2010]count 数字计数

    [算法]数位DP [题解] 记忆化搜索 #include<cstdio> #include<algorithm> #include<cstring> #define ...

  10. aspnet_regiis.exe -i 执行报错

    IIS刚部署时出现问题 处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 按照网上的步骤,使用管理员打开CMD 开始->所有程 ...