七仔的博客

七仔的博客GithubPages分博

0%

【python小工具】Json转MySQL建表语句

通过查询neo4j得到的json转换为MySQL建表语句,包含剪贴板、tkinter等代码

【python小工具】Json转MySQL建表语句

前因

工作需要将neo4j部分表转换为MySQL,所以做了这个小工具,使用前最好通读代码
扩展:如果有需要可以修改代码直接连接数据库直接执行新建数据库

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import json
from tkinter import *
from tkinter import messagebox
import win32con
import win32clipboard
import re


# 添加剪贴板
def set_text(string):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, string)
win32clipboard.CloseClipboard()


# 转下划线命名
def to_snake_case(x):
return re.sub('(?<=[a-z])[A-Z]|(?<!^)[A-Z](?=[a-z])', '_\g<0>', x).lower()


# 建立对话框
root = Tk()
root.title("Json转MySQL建表语句")
root.geometry('300x150')
l1 = Label(root, text="表名:")
l1.pack()
v_json_title = StringVar()
title = Entry(root, textvariable=v_json_title)
v_json_title.set("")
title.pack()
l2 = Label(root, text="Json:")
l2.pack()
v_json_str = StringVar()
sstr = Entry(root, textvariable=v_json_str)
v_json_str.set("")
sstr.pack()


# 点击事件
def on_click():
json_title = v_json_title.get()
json_str = v_json_str.get()
# 读取json
data = json.loads(json_str)
# 构建sql
sql = "CREATE TABLE `" + json_title + "` (\n `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n" \
" `parent_id` bigint(20) NOT NULL COMMENT '父ID',\n"
for item in data:
# 整数类型
if isinstance(data[item], int):
if len(str(data[item])) < 15:
sql += " `" + to_snake_case(item) + "` bigint(20) NULL DEFAULT NULL,\n"
elif len(str(data[item])) >= 15:
sql += " `" + to_snake_case(item) + "` bigint(" + str(len(str(data[item])) * 2) + ") NULL DEFAULT NULL,\n"
# 字符串类型
elif isinstance(data[item], str):
if len(data[item]) < 50:
sql += " `" + to_snake_case(item) + "` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n"
elif 50 <= len(data[item]) < 200:
sql += " `" + to_snake_case(item) + "` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n"
elif len(data[item]) >= 200:
sql += " `" + to_snake_case(item) + "` varchar(" + str(
len(data[item]) * 2) + ") CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n"
# 浮点类型
elif isinstance(data[item], float):
sql += " `" + to_snake_case(item) + "` decimal(15,3) NULL DEFAULT NULL,\n"
# 布尔类型
elif isinstance(data[item], float):
sql += " `" + to_snake_case(item) + "` bigint(1) NULL DEFAULT NULL,\n"
else:
print(data[item])
sql += " PRIMARY KEY (`id`) USING BTREE\n" \
") ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;"
set_text(sql)
messagebox.showinfo(title='处理成功', message="数据已经添加进剪贴板")
print(sql)


Button(root, text="转换", command=on_click).pack()
root.mainloop()

最后,需要打包好的exe程序下方留言邮箱即可

此为博主副博客,留言请去主博客,转载请注明出处:https://www.baby7blog.com/myBlog/112.html

欢迎关注我的其它发布渠道