[PYTHON] Ich habe ein Tool erstellt, um automatisch ein einfaches ER-Diagramm aus der Anweisung CREATE TABLE zu generieren

Neulich habe ich ein Befehlszeilentool namens Pyagram erstellt, das automatisch ein Zustandsübergangsdiagramm generiert, aber als zusätzliche Funktion die Beziehung zwischen Tabellen aus der Anweisung CREATE TABLE Implementierung einer Funktion zum automatischen Generieren eines einfachen ER-Diagramms, das nur verstanden werden kann.

Persönlich verwende ich überhaupt keine externen Schlüssel. Bei Verwendung von MySQL Workbench gab es also ein Problem, dass ich kein ER-Diagramm mit Beziehungen zwischen Tabellen erstellen konnte. Aus diesem Grund habe ich beschlossen, ein Tool zu erstellen, mit dem Eltern und Kind anhand des Spaltennamens erraten und zugeordnet werden können, auch wenn kein externer Schlüssel vorhanden ist.

Es gibt einige Einschränkungen bei der Verwendung. Bitte beachten Sie die folgenden Informationen, bevor Sie sie verwenden.

Außerdem ist die Überprüfung möglicherweise immer noch unzureichend, sodass sie möglicherweise nicht funktioniert. Wir würden uns freuen, wenn Sie dies im Kommentarbereich oder in der Github-Ausgabe melden könnten.

Das Folgende ist die generierte Zahl.

erd.gif

Bereiten Sie eine Datei vor, in der die folgende Anweisung CREATE TABLE als Eingabedatei definiert ist.

CREATE TABLE employees (
    id INT(11) NOT NULL AUTO_INCREMENT,
    birth_date DATE NOT NULL,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    gender INT(11) NOT NULL,
    hire_date DATE NOT NULL,
    department_id int(11),
    PRIMARY KEY('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE departments (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    PRIMARY KEY('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE titles (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    PRIMARY KEY('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE employee_title (
    employee_id INT(11) NOT NULL,
    title_id INT(11) NOT NULL,
    from_date DATE NOT NULL,
    to_date DATE NOT NULL,
    PRIMARY KEY('employee_id', 'title_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE salaries (
    id INT(11) NOT NULL AUTO_INCREMENT,
    employee_id INT(11) NOT NULL,
    salary INT(11) NOT NULL,
    from_date DATE NOT NULL,
    to_date DATE NOT NULL,
    PRIMARY KEY('id'),
    KEY('employee_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Führen Sie den folgenden Befehl aus, um das Diagramm zu generieren.

pyagram -t {Bildtyp} -o {Ausgabepfad} -i {Eingabedatei} -f {Schriftartenname} -d erd

Sie können es auch mit dem folgenden Befehl installieren.

pip3 install pyagram

Für dieses Update haben wir eine große Änderung vorgenommen, um es zu einer steckbaren Implementierung zu machen. Durch Erben der Klasse "Diagramm" können Sie beliebig viele Klassen zur Diagrammgenerierung erstellen. In der Diagrammklasse

  1. lexikalische Analyse
  2. syntaktische Analyse
  3. generate_dot (Datengenerierung für Punktdatei)
  4. generate_image (Generierung von Bilddateien)

Es gibt ungefähr vier Prozesse, aber in der Klasse, die Diagram erbt, wird es so erstellt, dass 1 bis 3 implementiert werden können.

In Zukunft möchte ich die Anzahl der Ausgabeelemente und die Arten von RDBMS, die dies unterstützen, erhöhen, aber es wird ein wenig schmerzhaft sein, daher möchte ich mir die Zeit nehmen, um fortzufahren.

Recommended Posts

Ich habe ein Tool erstellt, um automatisch ein einfaches ER-Diagramm aus der Anweisung CREATE TABLE zu generieren
Ich habe ein Tool zum Generieren von Markdown aus der exportierten Scrapbox-JSON-Datei erstellt
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Ich habe ein Plugin erstellt, um mit Vim eine Markdown-Tabelle aus CSV zu generieren
Ich habe versucht, automatisch eine Portverwaltungstabelle aus L2SW Config zu generieren
Ich habe ein Tool zum automatischen Sichern der Metadaten der Salesforce-Organisation erstellt
Ich habe einen Befehl zum Markieren des Tabellenclips gegeben
Ich habe Python-Code geschrieben, um ein Tabellen- (Ansichts-) Abhängigkeitsdiagramm (PlantUML) aus SQL zu erstellen
Ich habe einen Befehl zum Generieren eines Kommentars für eine Tabelle in Django eingegeben
Ich habe ein Tool erstellt, um automatisch ein Zustandsübergangsdiagramm zu generieren, das sowohl für die Webentwicklung als auch für die Anwendungsentwicklung verwendet werden kann
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich habe ein Tool erstellt, um die Ausführungszeit von cron zu schätzen (+ PyPI-Debüt)
Ich habe ein Paket erstellt, um eine ausführbare Datei aus dem Hy-Quellcode zu erstellen
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
[Python] Ich habe ein System erstellt, um "das Rezept, das ich wirklich will" von der Rezeptseite einzuführen!
Ich habe versucht, das Blockdiagramm-Generierungswerkzeug blockdiag einzuführen
Ich habe ein Tool erstellt, mit dem das Erstellen und Installieren eines öffentlichen Schlüssels etwas einfacher ist.
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe ein Tool erstellt, um die Antwortlinks von OpenAI Gym auf einmal zu erhalten
Ich möchte automatisch einen modernen Metal-Bandnamen generieren
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Eine Geschichte, die es ermöglichte, automatisch eine Anison-Wiedergabeliste aus Ihren Musikdateien zu erstellen
Erstellen Sie ein Korrelationsdiagramm aus dem Konversationsverlauf von Twitter
[Titan Craft] Ich habe ein Werkzeug gemacht, um einen Riesen nach Minecraft zu rufen
Ich habe Sie dazu gebracht, Befehle über einen WEB-Browser auszuführen
Ich möchte vorerst eine Docker-Datei erstellen.
Ich habe versucht, ein Programm zu erstellen, um die Fehlersuche von Saiseriya zu lösen (Hinweis)
Ich möchte automatisch hochwertige Teile aus den von mir aufgenommenen Videos finden
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
Ich möchte ein System erstellen, um zu verhindern, dass vergessen wird, den Schlüssel 1 festzuziehen
Fortsetzung: Ich habe versucht, das Blockdiagramm-Generierungswerkzeug blockdiag einzuführen
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen
Ich habe den Befehl gegeben, einen farbenfrohen Kalender im Terminal anzuzeigen
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Ich habe ein POST-Skript erstellt, um ein Problem in Github zu erstellen und es im Projekt zu registrieren
Ich möchte nur ein Signal vom Sub-Thread zum Haupt-Thread senden
[Django] Erstellt ein Feld zur Eingabe von Daten mit 4-stelligen Zahlen
Ich habe einen Küchentimer erstellt, der in der Statusleiste angezeigt wird!
Ich habe ein CLI-Tool erstellt, um Bilder in jedem Verzeichnis in PDF zu konvertieren
Ich habe eine Art einfaches Bildverarbeitungswerkzeug in der Sprache Go erstellt.
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe eine Bibliothek konoha gemacht, die den Tokenizer auf ein schönes Gefühl umstellt
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
So erstellen Sie einen Klon aus Github
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
So erstellen Sie ein Repository aus Medien
Ich habe ein automatisches Stempelwerkzeug für den Browser erstellt.