Tool das SVWS-Schulungsdatenbanken um ein Schuljahr versetzt.
- Alle Schuljahresabschnitte in der Tabelle "Schuljahresabschnitte" beginnend mit dem höchsten Abschnitt um ein Jahr erhöhen.
- Alle Datumswerte bei Schülern und Lehrkräften um ein Jahr erhöhen.
- Python 3.12+
- MariaDB 10.11+ oder höher
- pip (Python Package Manager)
Für die MariaDB-Unterstützung werden folgende Systembibliotheken benötigt:
sudo apt-get install libmariadb-dev libmariadb3 python3.12-devInstallieren Sie die erforderlichen Python-Pakete:
pip install mariadbOder verwenden Sie die virtuelle Umgebung des Projekts:
.venv/bin/pip install mariadbDie Datei config.json enthält die Datenbankverbindungskonfiguration:
{
"database": {
"host": "localhost",
"port": 3306,
"user": "dbuser",
"password": "",
"database": "svws",
"autocommit": true
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
}Konfigurationsparameter:
host: Datenbankserver-Hostname (Standard: localhost)port: Datenbankserver-Port (Standard: 3306)user: Datenbankbenutzerpassword: Datenbankpasswortdatabase: Datenbanknameautocommit: Automatisches Commit nach Queries (Standard: true)
Hinweis: Wenn user, password oder database in der config.json fehlen oder null/leer sind, fragt das Tool diese Werte beim Start interaktiv im Terminal ab (Passwort verdeckt). Die Eingaben werden nicht in die config.json zurückgeschrieben.
from svws_schuljahr import create_connection_from_config, increment_schuljahresabschnitte_jahr
# Verbindung erstellen
db = create_connection_from_config("config.json")
if db and db.connect():
# Schuljahresabschnitte um ein Jahr erhöhen
if increment_schuljahresabschnitte_jahr(db):
print("✓ Schuljahresabschnitte erfolgreich aktualisiert")
else:
print("✗ Fehler beim Aktualisieren")
db.disconnect()Das Skript kann direkt ausgeführt werden und führt automatisch Tests durch:
python3 svws_schuljahr.pyOder mit der virtuellen Umgebung:
.venv/bin/python svws_schuljahr.pyAb jetzt steht eine kleine CLI zur Verfügung:
# Schritte anzeigen
.venv/bin/python svws_schuljahr.py list-steps
# Alle Schritte als Dry-Run (Rollback am Ende)
.venv/bin/python svws_schuljahr.py run --dry-run
# Nur bestimmte Schritte ausführen (mit Commit)
.venv/bin/python svws_schuljahr.py run --steps schueler_dates --steps schueler_abschlussdatum
# Alternative: Komma-separiert
.venv/bin/python svws_schuljahr.py run --steps schueler_dates,schueler_abschlussdatum
# Anderes Config-File
.venv/bin/python svws_schuljahr.py run --config path/to/config.json --dry-runVerwaltet die Verbindung zur MariaDB-Datenbank:
Hauptmethoden:
connect(): Verbindung zur Datenbank herstellendisconnect(): Verbindung trennenexecute_query(query, params): SELECT-Query ausführenexecute_update(query, params): INSERT/UPDATE/DELETE ausführencommit(): Transaktionen bestätigenrollback(): Transaktionen rückgängig machenget_cursor(): Datenbankzeiger abrufen
Context Manager Unterstützung:
with MariaDBConnection(host="localhost", user="root", password="password", database="SVWS") as db:
results = db.execute_query("SELECT * FROM Schuljahresabschnitte")load_config(config_path): Lädt die Konfiguration aus einer JSON-Datei
Parameter:
config_path: Pfad zur config.json (Standard: "config.json")
Rückgabewert:
- Dictionary mit Konfigurationsdaten
increment_schuljahresabschnitte_jahr(db, do_commit=True): Erhöht die Jahr-Spalte in der Schuljahresabschnitte-Tabelle um 1
Funktionsweise:
- Ruft alle unterschiedlichen Jahre aus der Tabelle ab, sortiert in absteigender Reihenfolge
- Verarbeitet jedes Jahr vom höchsten zum niedrigsten
- Prüft auf Constraint-Verletzungen bevor das Jahr aktualisiert wird
- Aktualisiert alle Datensätze für das entsprechende Jahr
- Committed die Transaktion nach erfolgreicher Aktualisierung (abschaltbar via
do_commit=False)
Rückgabewert:
Truebei ErfolgFalsebei Fehler (mit automatischem Rollback)
increment_schueler_dates(db, do_commit=True): Erhöht alle Datumsfelder in der Tabelle Schueler um 1 Jahr.
Betroffene Spalten:
- Geburtsdatum, Religionsabmeldung, Religionsanmeldung, Schulwechseldatum
- BeginnBildungsgang, AnmeldeDatum, Aufnahmedatum, EndeEingliederung, EndeAnschlussfoerderung
- SprachfoerderungVon, SprachfoerderungBis
Eigenschaften:
- Nutzt
DATE_ADDfür korrekte Jahresverschiebung - NULL-sicher (NULL bleibt NULL)
- Ein Bulk-Update für alle Felder
increment_schueler_abschlussdatum(db, do_commit=True): Erhöht das Feld Abschlussdatum (VARCHAR, Format D.M.YYYY/ DD.MM.YYYY) um 1 Jahr.
Eigenschaften:
- Parsen mit
STR_TO_DATE, Jahresinkrement viaDATE_ADD - Ausgabe im ursprünglichen deutschen Datumsformat
- Nur Werte, die das erwartete Datumsregex erfüllen, werden angepasst
increment_schueler_year_fields(db, do_commit=True): Erhöht Integer-Jahresfelder um 1.
Betroffene Spalten:
- JahrZuzug, JahrWechsel_SI, JahrWechsel_SII
Eigenschaften:
- NULL-sicher (NULL bleibt NULL)
- Ein Bulk-Update für alle drei Felder
increment_schueler_abgaenge_dates(db, do_commit=True): Erhöht Datumsfelder in der Tabelle SchuelerAbgaenge um 1 Jahr.
Betroffene Spalten:
- LSSchulEntlassDatum
- LSBeginnDatum
Eigenschaften:
- Nutzt
DATE_ADDfür korrekte Jahresverschiebung - NULL-sicher (NULL bleibt NULL)
- Ein Bulk-Update für beide Felder mit Sample-Logging
increment_schueler_lernabschnittsdaten_dates(db, do_commit=True): Erhöht Datumsfelder in der Tabelle SchuelerLernabschnittsdaten um 1 Jahr.
Betroffene Spalten:
- DatumVon, DatumBis
- Konferenzdatum, Zeugnisdatum
- NPV_Datum, NPAA_Datum, NPBQ_Datum, DatumFHR
Eigenschaften:
- Nutzt
DATE_ADDfür korrekte Jahresverschiebung - NULL-sicher (NULL bleibt NULL)
- Bulk-Update für alle acht Felder mit Sample-Logging
increment_schueler_leistungsdaten_warndatum(db, do_commit=True): Erhöht das Feld Warndatum in der Tabelle SchuelerLeistungsdaten um 1 Jahr (nur wenn nicht NULL).
run_all_increments(config_path="config.json", dry_run=False, steps=None): Führt alle Schritte in einer orchestrierten Transaktion aus.
Eigenschaften:
- Führt die Schritte in sinnvoller Reihenfolge aus und nutzt eine gemeinsame Transaktion
- Setzt Autocommit intern außer Kraft und steuert Commit/Rollback zentral
dry_run=True: Alle Änderungen werden durchgeführt, am Ende jedoch zurückgerolltsteps: Optional Liste von Schritten (Keys) zur gezielten Ausführung, z.B.["schueler_dates", "schueler_abschlussdatum"]
Verfügbare Schritt-Keys:
schuljahresabschnitteschueler_datesschueler_abschlussdatumschueler_year_fieldsschueler_abgaenge_datesschueler_lernabschnittsdaten_datesschueler_leistungsdaten_warndatumschueler_einzelleistungen_datumschueler_fehlstunden_datumschueler_vermerke_datumschueler_merkmale_datesschueler_foerderempfehlungen_datesschueler_allgadr_dateslehrer_dates
Beispiel (Dry-Run):
from svws_schuljahr import run_all_increments
# Führe alle Schritte aus, ohne zu committen (Rollback am Ende)
ok = run_all_increments("config.json", dry_run=True)
print("OK" if ok else "Fehler")Beispiel (Nur bestimmte Schritte, Commit):
from svws_schuljahr import run_all_increments
# Nur Schüler-Daten und Abschlussdatum mit Commit
ok = run_all_increments(
"config.json",
dry_run=False,
steps=["schueler_dates", "schueler_abschlussdatum"]
)
print("OK" if ok else "Fehler")Eigenschaften:
- Nutzt
DATE_ADD(Warndatum, INTERVAL 1 YEAR) - NULL-sicher (NULL bleibt NULL)
- Liefert Beispielwerte im Log zur Verifikation
increment_schueler_einzelleistungen_datum(db, do_commit=True): Erhöht das Feld Datum in der Tabelle SchuelerEinzelleistungen um 1 Jahr (nur wenn nicht NULL).
Eigenschaften:
- Nutzt
DATE_ADD(Datum, INTERVAL 1 YEAR) - NULL-sicher (NULL bleibt NULL)
- Liefert Beispielwerte im Log zur Verifikation
increment_schueler_fehlstunden_datum(db, do_commit=True): Erhöht das Feld Datum in der Tabelle SchuelerFehlstunden um 1 Jahr (nur wenn nicht NULL).
Eigenschaften:
- Nutzt
DATE_ADD(Datum, INTERVAL 1 YEAR) - NULL-sicher (NULL bleibt NULL)
- Liefert Beispielwerte im Log zur Verifikation
increment_schueler_vermerke_datum(db, do_commit=True): Erhöht das Feld Datum in der Tabelle SchuelerVermerke um 1 Jahr (nur wenn nicht NULL).
Eigenschaften:
- Nutzt
DATE_ADD(Datum, INTERVAL 1 YEAR) - NULL-sicher (NULL bleibt NULL)
- Liefert Beispielwerte im Log zur Verifikation
increment_schueler_merkmale_dates(db, do_commit=True): Erhöht die Felder DatumVon und DatumBis in der Tabelle SchuelerMerkmale um 1 Jahr (nur wenn nicht NULL).
Eigenschaften:
- Nutzt
DATE_ADD(..., INTERVAL 1 YEAR) - NULL-sicher (NULL bleibt NULL)
- Bulk-Update beider Felder mit Beispiel-Logging
increment_schueler_foerderempfehlungen_dates(db, do_commit=True): Erhöht die Felder DatumAngelegt, Zeitrahmen_von_Datum, Zeitrahmen_bis_Datum, Ueberpruefung_Datum, Naechstes_Beratungsgespraech um 1 Jahr (nur wenn nicht NULL).
Eigenschaften:
- Nutzt
DATE_ADD(..., INTERVAL 1 YEAR)für alle aufgeführten Felder - NULL-sicher (NULL bleibt NULL)
- Liefert Beispielwerte im Log zur Verifikation
increment_schueler_allgadr_dates(db, do_commit=True): Erhöht die Felder Vertragsbeginn und Vertragsende in der Tabelle Schueler_AllgAdr um 1 Jahr (nur wenn nicht NULL).
Eigenschaften:
- Nutzt
DATE_ADD(..., INTERVAL 1 YEAR) - NULL-sicher (NULL bleibt NULL)
- Liefert Beispielwerte im Log zur Verifikation
increment_lehrer_dates(db, do_commit=True): Erhöht Datumsfelder in der Tabelle K_Lehrer um 1 Jahr (nur wenn nicht NULL).
Betroffene Spalten:
- Geburtsdatum
- DatumZugang
- DatumAbgang
Eigenschaften:
- Nutzt
DATE_ADD(..., INTERVAL 1 YEAR) - NULL-sicher (NULL bleibt NULL)
- Bulk-Update aller drei Felder mit Beispiel-Logging
Das Tool verwendet Python-Logging und gibt detaillierte Informationen aus:
INFO: Erfolgreiche Operationen (Verbindungen, Updates)WARNING: Potenzielle Probleme (z.B. existierende Jahre)ERROR: Fehlerhafte Operationen
Die Logging-Konfiguration kann in config.json angepasst werden.
INFO:__main__:Configuration loaded from config.json
INFO:__main__:Successfully connected to MariaDB at localhost:3306/anonym
INFO:__main__:Found 10 distinct years: [2030, 2029, 2028, 2027, 2026, 2025, 2024, 2023, 2022, 2021]
INFO:__main__:Updated 1 rows: Jahr 2030 -> 2031
INFO:__main__:Updated 2 rows: Jahr 2029 -> 2030
...
INFO:__main__:Successfully incremented all years in Schuljahresabschnitte
✓ Years successfully incremented
- Transaktionsmanagement: Alle Änderungen werden in Transaktionen ausgeführt
- Parametrisierte Queries: Schutz vor SQL-Injection
- Fehlerbehandlung: Automatisches Rollback bei Fehlern
- Constraint-Validierung: Prüfung auf eindeutige Constraint-Verletzungen
- Sichere Verbindung: Unterstützung für verschlüsselte Verbindungen
Das Tool implementiert umfassende Fehlerbehandlung:
- Verbindungsfehler werden geloggt und behandelt
- Query-Fehler werden mit Logging dokumentiert
- Transaktionsfehler führen zu automatischem Rollback
- Detaillierte Error-Messages unterstützen die Fehlerbehebung
Siehe LICENSE-Datei