/
deka
/
dber
Обзор
Документация
Войти
/
deka
/
dber
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
Confluence.py
69 строк
4 KB
Maxim Ratnikov
Перевод и переименование
03 окт 2024, 22:52
03 окт 2024, 22:52
66088bf
Код
Авторство
О чём код?
from pydbml import PyDBML from pathlib import Path from functools import reduce import pandas as pd def print_header(arr): for item in arr: print("||", item, end='') print("||") def print_row(arr): for item in arr: print("|", item, end='') print("|") #Парсим DBML parsed = PyDBML(Path('tiring.dbml')) # Обозначаем стобцы таблиц columnsName = ["name","type","not_null","note"] # Обозначаем дополнительные столбцы таблиц indexName =["index","PK/Uniq","Ref"] # Задаем словарь замен (что меняем, на что меняем) rep = ("||", "\n----\n"),( "False", " "),("True", "NN"),("[",""),("]","") #Делаем оглавление и якорь наверху print("{anchor:top}\n{toc:printable=true|style=square|maxLevel=3|indent=5px|minLevel=3|class=bigpink|type=list}") parsed.tables.sort(key=lambda Table:Table.name) for table in parsed.tables: tableArr =[] #Создаем заголовок с якорем для названия таблицы print("h3. [", table.name,"|#top]","{anchor:",table.name,"}",sep='') print("",end='') if table.note.text == "" else print("*", table.note) print("",end='') if table.comment == None else print("*", table.comment) print("") tableRow=0 for column in table.columns: tableCol = 0 #Данные для вывода будем набирать в массив tableArr.append([]) #Для каждой строки распарсенной таблицы, проходим по выбранным наименованиям колонок и добавляем в массив for columnName in columnsName: tableArr[tableRow].append(reduce(lambda a, kv: a.replace(*kv), rep, str(getattr(column, columnName)))) tableCol += 1 iFlag = 0 #расширяем массив для добавления данных по дополнительным полям tableArr[tableRow].extend([" "] * len(indexName)) #Добавляем индексы и ключи for index in table.indexes: if column.name in index.subject_names: iFlag += 1 tableArr[tableRow][tableCol] = ((tableArr[tableRow][tableCol] + "\n----\n") if iFlag > 1 else "") + index.name + "\n----\n??" + '?? , ??'.join(index.subject_names) + "??" tableArr[tableRow][tableCol+1] = ("PK" if index.pk else " ") if tableArr[tableRow][tableCol+1] == " " else tableArr[tableRow][tableCol+1] tableArr[tableRow][tableCol+1] = ("U" if index.unique else " ") if tableArr[tableRow][tableCol+1] == " " else tableArr[tableRow][tableCol+1] rFlag = 0 #Добавляем связи for ref in parsed.refs: if column.name == ref.col1[0].name and table.name == ref.table1.name: rFlag += 1 tableArr[tableRow][tableCol+2] = ((tableArr[tableRow][tableCol+2] + "\n----\n") if iFlag > 1 else "") + "[#"+ ref.table2.name +"] " + ref.col2[0].name +" ??" + str(ref.on_delete) + "?? ??" + str(ref.on_update) + "??" if column.name == ref.col2[0].name and table.name == ref.table2.name: rFlag += 1 tableArr[tableRow][tableCol+2] = ((tableArr[tableRow][tableCol+2] + "\n----\n") if iFlag > 1 else "") + ref.name + "[#"+ ref.table1.name +"] " + ref.col1[0].name +" ??" + str(ref.on_delete) + "?? ??" + str(ref.on_update) + "??" tableRow += 1 columnList = columnsName+indexName df = pd.DataFrame(tableArr, columns= columnList) rs = df.sort_values(['PK/Uniq','index','Ref','not_null','name'], ascending=[False,False,False,False,True]) print_header(columnList) for num,arr in enumerate(rs.to_numpy()): print_row(arr) print("----")