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
93
94
| import docx
import re
import sys
def column_0(cell_text):
sys.stdout.write(" `{}` ".format(cell_text.lower()))
def column_1(cell_text):
if cell_text == "DATE":
sys.stdout.write("TIMESTAMP ")
# Поиск NUMBER
result = re.search(r'NUMBER\((.*)\)', cell_text)
if result:
number = int(result.group(1))
if 1 <= number <= 3:
sys.stdout.write("TINYINT(3) UNSIGNED ")
if 4 <= number <= 6:
sys.stdout.write("SMALLINT(5) UNSIGNED ")
if 7 <= number <= 11:
sys.stdout.write("INT(10) UNSIGNED ")
if 12 <= number <= 38:
sys.stdout.write("BIGINT(20) UNSIGNED ")
return
# Поиск VARCHAR2
result = re.search(r'VARCHAR2\((.*)\)', cell_text)
if result:
number = int(result.group(1))
sys.stdout.write("VARCHAR({}) ".format(number))
return
# Другие типы
sys.stdout.write("{} ".format(cell_text))
def column_2(cell_text):
if cell_text == "Y":
sys.stdout.write(" ")
else:
sys.stdout.write("NOT NULL ")
def column_3(cell_text):
if cell_text:
if cell_text.isspace():
sys.stdout.write("")
else:
if cell_text == "SysDate":
sys.stdout.write("DEFAULT CURRENT_TIMESTAMP() ")
else:
sys.stdout.write("DEFAULT {} ".format(cell_text))
else:
sys.stdout.write("")
def column_4(cell_text):
sys.stdout.write("COMMENT '{}',".format(cell_text))
def create_table(table_name):
sys.stdout.write("DROP TABLE IF EXISTS ESB_OUT_A_{}\p;\n".format(table_name))
sys.stdout.write("CREATE TABLE IF NOT EXISTS ESB_OUT_A_{} (\n".format(table_name))
sys.stdout.write(" `message_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Последовательная техническая нумерация сообщений',\n")
sys.stdout.write(" `operation_code` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Тип операции: 0-вставка, 1-обновление, 2-удаление',\n")
sys.stdout.write(" `message_dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() COMMENT 'Время возникновения записи в таблице, используется для расследования инцидентов',\n")
sys.stdout.write(" `entity_id` VARCHAR(128) NOT NULL COMMENT 'ID сущности используемый в системе',\n")
sys.stdout.write(" `receiver_id` BIGINT UNSIGNED DEFAULT NULL COMMENT 'Содержит дополнительный признак в случае повторных и корректирующих выгрузок',\n")
sys.stdout.write(" `maintenance_flg` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Флаг с признаком корректирующей выгрузки: 0-регламентная, 1-корректирующая',\n")
def end_table(table_name, comment):
sys.stdout.write(" PRIMARY KEY(message_id)\n")
sys.stdout.write(")\n")
sys.stdout.write("ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci COMMENT = '{}'\p;\n".format(comment))
sys.stdout.write("\n")
sys.stdout.write("DROP TABLE IF EXISTS ESB_OUT_H_{}\p;\n".format(table_name))
sys.stdout.write("CREATE TABLE IF NOT EXISTS ESB_OUT_H_{}\n".format(table_name))
sys.stdout.write(" LIKE ESB_OUT_A_{}\p;\n\n".format(table_name))
def main():
document = docx.Document('Front-Back-interface.docx')
sql_creator = dict()
sql_creator[0] = column_0
sql_creator[1] = column_1
sql_creator[2] = column_2
sql_creator[3] = column_3
sql_creator[4] = column_4
create_table(sys.argv[3])
for table_index in range(int(sys.argv[1]), int(sys.argv[2]) + 1):
for i in range(2, len(document.tables[table_index].rows)):
for j in range(len(document.tables[table_index].rows[i].cells)):
cell_text = document.tables[table_index].rows[i].cells[j].text
sql_creator[j](cell_text)
sys.stdout.write("\n")
end_table(sys.argv[3], sys.argv[4])
if __name__ == "__main__":
main() |