ソースコード(ダミー)

ソースコード(ダミー)

これはダミーのソースコードです。

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
82
83
84
85
86
87
88
89
90
91
92

from more_itertools import chunked
import openpyxl
import pprint
from itertools import groupby
from operator import itemgetter


wb = openpyxl.load_workbook('test.xlsx')
sheet = wb['Sheet3']

table_name = sheet['C2'].value
mylist = [[c.value for c in r if c.value is not None] for r in sheet.iter_rows(min_row=4,min_col=3) if r[0].value is not None]

#pprint.pprint(mylist, width=200)
mylist = sorted(mylist, key=itemgetter(0))

create_sql_list = dict()
recreate_sql_list = dict()
alter_sql_list = dict()

for (table_name, table_values) in groupby(mylist, key=itemgetter(0)):
print("table_name:" + table_name)
tstr = "CREATE TABLE " + table_name + "("
table_definition = ""
alter_table_str = ""
version_num = len(list(chunked(r[1:], 8)))-1
alter_table_str_list = [""] * version_num
is_recreate_list = [False] * version_num
drop_column_list = [""] * version_num
for r in table_values:
vlist = list(chunked(r[1:], 8))

if (vlist[-1][0] == "〇"):
#pprint.pprint(r[4:])
column_definition_str = vlist[-1][1] + " " + vlist[-1][2]
if (vlist[-1][3] == "〇"):
column_definition_str += " PRIMARY KEY"
if (vlist[-1][4] == "〇"):
column_definition_str += " AUTOINCREMENT"
if ((vlist[-1][5] != "-") and (vlist[-1][6] != "-")):
column_definition_str += " CHECK("+str(vlist[-1][6])+" < "+vlist[-1][1]+" and "+vlist[-1][1]+" < "+str(vlist[-1][5])+")"
elif (vlist[-1][5] != "-"):
column_definition_str += " CHECK("+vlist[-1][1]+" < "+str(vlist[-1][5])+")"
elif (vlist[-1][6] != "-"):
column_definition_str += " CHECK("+str(vlist[-1][6])+" < "+vlist[-1][1]+")"
if (vlist[-1][7] != "-"):
column_definition_str += " DEFAULT "+str(vlist[-1][7])
table_definition += column_definition_str + ", "

for i,columns in enumerate(vlist[:-1]):
if (columns != vlist[-1]):
if ((columns[0] == "×") and (vlist[-1][0] == "〇")):
alter_table_str_list[i] += "ALTER TABLE ADD COLUMN " + column_definition_str + ";"
elif ((columns[0] == "〇") and (vlist[-1][0] == "〇")):
if (columns[1] != vlist[-1][1]):
alter_table_str_list[i] += "ALTER TABLE RENAME COLUMN " + columns[1] + " TO " + vlist[-1][1] + ";"
if (columns[2:] != vlist[-1][2:]):
is_recreate_list[i] = True
elif ((columns[0] == "〇") and (vlist[-1][0] == "×")):
# 先に Rename 実施するので、最新のカラム名としておく
drop_column_list[i] += vlist[-1][1]+","
is_recreate_list[i] = True



table_definition = table_definition[:-2] + ");"
create_sql_list[table_name] = "CREATE TABLE " + table_name + "(" + table_definition
alter_sql_list[table_name] = alter_table_str_list
print(drop_column_list)

recreate_str_list = [""] * version_num
for i,is_recreate in enumerate(is_recreate_list):
if is_recreate:
collist = "*"
recreate_str_list[i] = "CREATE TABLE " + table_name + "_tmp(" + table_definition
recreate_str_list[i] += "INSERT INTO " + table_name + "_tmp(" + collist + ") SELECT " + collist + " FROM " + table_name + ";"
recreate_str_list[i] += "DROP TABLE " + table_name + ";"
recreate_str_list[i] += "ALTER TABLE " + table_name + "_tmp RENAME TO " + table_name + ";"

recreate_sql_list[table_name] = recreate_str_list



# exit
print("----------------\n")
print(create_sql_list)
print("----------------\n")
print(recreate_sql_list)
print("----------------\n")
print(alter_sql_list)