Update 4-4-2-database-generator.md

This commit is contained in:
Sebastian
2023-12-29 08:07:34 +01:00
committed by Philipp Horstenkamp
parent 98d1edc807
commit d96706b468

View File

@ -1,9 +1,9 @@
### Database Generator (Philipp Horstenkamp) ### Database Generator (Philipp Horstenkamp)
Zur Definition eines Relationalen Datenbankschemas und um zur Härtung gegen SQL-Injections wurde SQLAlchemy als SQL Interface / Driver / Abstraction layer genutzt. Zur Definition eines Relationalen Datenbankschemas und zur Härtung gegen SQL-Injections wurde SQLAlchemy als SQL Interface / Driver / Abstraction layer genutzt.
SQLAlchemy sorgt dabei für ein stark dialekt unabhängiges Interface. SQLAlchemy sorgt dabei für ein Dialekt unabhängiges Interface, um unabhängig von der verwendeten Datenbank zu sein.
Auch wenn es seit einiger Zeit SQLAlchemy2 gibt haben wir uns entschieden mit Version 1.4 zu nutzen da es zur Version 2 nur wenig Dokumentation externe Dokumentation und Beispiele gab. Auch wenn es seit einiger Zeit SQLAlchemy2 gibt haben wir uns entschieden Version 1.4 zu nutzen da es zur Version 2 nur wenig Dokumentation, externe Dokumentation und Beispiele gab.
SQLAlchemy ist ein sehr mächtiges und beliebtes Werkzeug, leider ist die Projektdokumentation sehr undurchsichtig. SQLAlchemy ist ein sehr mächtiges und beliebtes Werkzeug, leider ist die Projektdokumentation sehr undurchsichtig.
Da aber SQLAlchemy1.4 zurzeit noch gewartet wird, ist dies für dieses Projekt kein Problem. Da aber SQLAlchemy1.4 zurzeit noch gewartet wird, ist dies für dieses Projekt kein Problem.
@ -49,8 +49,7 @@ class Company(Base):
Natürlich ist es manchmal sinnvoll SQL-Tabellen dynamischer und mit wenig Code-Duplication zu generieren. Natürlich ist es manchmal sinnvoll SQL-Tabellen dynamischer und mit wenig Code-Duplication zu generieren.
Eine Möglichkeit dazu ist die folgende Definition in der die Union einiger Teildefinitionen als Dictionary. Eine Möglichkeit dazu ist die folgende Definition in der die Union einiger Teildefinitionen als Dictionary.
So kann zum Beispiel eine Tabelle generiert werden, So kann zum Beispiel eine Tabelle generiert werden, in der ein Enumerationswert die Column angibt ohne das die Datenbank durch den Enum als Foreign Key aufgeblasen/verlangsamt wird.
in der ein Enumerationswert die Column angibt ohne das die Datenbank durch den Enum als Foreign Key aufgeblasen/verlangsamt wird.
```python ```python
from aki_prj23_transparenzregister.utils.enum_types import ( from aki_prj23_transparenzregister.utils.enum_types import (
@ -80,7 +79,7 @@ Base.metadata.create_all(db.bind)
Dabei ist `db` eine `sqlalchemy.orm.Session` welche über eine SQL-Engine mit einer Datenbank verbindet. Dabei ist `db` eine `sqlalchemy.orm.Session` welche über eine SQL-Engine mit einer Datenbank verbindet.
Das resultierende SQL-Schema sieht dan wie folgt aus: Das resultierende SQL-Schema sieht dann wie folgt aus:
```{eval-rst} ```{eval-rst}
.. drawio-figure:: db-schema.drawio .. drawio-figure:: db-schema.drawio
:format: png :format: png