Push 05.02.2026
This commit is contained in:
104
Datenbank.py
104
Datenbank.py
@@ -1,11 +1,12 @@
|
||||
from decimal import Decimal
|
||||
import os
|
||||
import pandas as pd
|
||||
import sqlite3
|
||||
import sympy as sp
|
||||
from sympy import MutableDenseMatrix
|
||||
from typing import Any
|
||||
|
||||
from Berechnungen import Einheitenumrechnung
|
||||
from Einheitenumrechnung import Einheitenumrechnung
|
||||
|
||||
class Datenbank_anlegen:
|
||||
"""Legt die SQLite-Datenbank für die Ausgleichungsrechnung an.
|
||||
@@ -147,6 +148,7 @@ class Datenbankzugriff:
|
||||
|
||||
- Schreiben in die Datenbank durch alle set_* Methoden
|
||||
- Lesen aus der Datenbank durch alle get_* Methoden
|
||||
- Darstellen der aus der Datenbenak gelesenen Daten in tabellarischer Form durch alle tabelle_* Methoden
|
||||
|
||||
:ivar pfad_datenbank: Pfad zur SQLite-Datenbankdatei.
|
||||
:vartype pfad_datenbank: str
|
||||
@@ -241,7 +243,7 @@ class Datenbankzugriff:
|
||||
else:
|
||||
id_instrument = cursor.execute(
|
||||
"SELECT instrumenteID FROM Instrumente WHERE typ = ? AND name =?", (typ, name))
|
||||
print(f"Das Instrument {name} ist bereits in der Datenbank vorhanden.\nEs hat die ID {id_instrument.fetchone()[0]}")
|
||||
print(f"Das Instrument {name} ist bereits in der Datenbank vorhanden.")
|
||||
con.commit()
|
||||
cursor.close()
|
||||
con.close()
|
||||
@@ -252,7 +254,8 @@ class Datenbankzugriff:
|
||||
|
||||
Prüft, ob instrumenteID existiert und ob mindestens eine Genauigkeitsangabe übergeben wurde.
|
||||
Je nach Beobachtungsart werden Einheitenumrechnungen durchgeführt (z. B. mgon → rad bzw. mm → m).
|
||||
Der Eintrag wird nur ergänzt, wenn in Genauigkeiten kein identischer Datensatz vorhanden ist.
|
||||
Der Eintrag wird neu hinzugefügt, wenn in Genauigkeiten kein identischer Datensatz vorhanden ist.
|
||||
Ansonsten wird der bestehende Datensatz in der Datenbank aktualisiert.
|
||||
|
||||
:param instrumenteID: ID des Instruments in der Tabelle Instrumente.
|
||||
:type instrumenteID: int
|
||||
@@ -300,51 +303,36 @@ class Datenbankzugriff:
|
||||
if isinstance(stabw_apriori_streckenprop, Decimal):
|
||||
stabw_apriori_streckenprop = float(stabw_apriori_streckenprop)
|
||||
|
||||
# Überprüfen, ob die Genauigkeitsinformation für die jeweilige Beobachtungsart des Instruments bereits vorhanden ist. Wenn nein, wird die Benutzereingabe in die Datenbank gespeichert.
|
||||
sql = "SELECT 1 FROM Genauigkeiten WHERE instrumenteID = ? AND beobachtungsart = ?"
|
||||
params = [instrumenteID, beobachtungsart]
|
||||
# Prüfen, ob für dieses Instrument und diese Art bereits ein Eintrag existiert
|
||||
vorhanden = cursor.execute("SELECT 1 FROM Genauigkeiten WHERE instrumenteID = ? AND beobachtungsart = ?",
|
||||
(instrumenteID, beobachtungsart)).fetchone()
|
||||
|
||||
if stabw_apriori_konstant is None:
|
||||
sql += " AND stabw_apriori_konstant IS NULL"
|
||||
if vorhanden:
|
||||
# Bestehenden Datensatz aktualisieren
|
||||
cursor.execute(
|
||||
"UPDATE Genauigkeiten SET stabw_apriori_konstant = ?, stabw_apriori_streckenprop = ? WHERE instrumenteID = ? AND beobachtungsart = ?",
|
||||
(stabw_apriori_konstant, stabw_apriori_streckenprop, instrumenteID, beobachtungsart)
|
||||
)
|
||||
print(f"Die Genauigkeitsangabe für {beobachtungsart} (Instrument: {instrumentenname}) wurde aktualisiert.")
|
||||
else:
|
||||
sql += " AND stabw_apriori_konstant = ?"
|
||||
params.append(stabw_apriori_konstant)
|
||||
|
||||
if stabw_apriori_streckenprop is None:
|
||||
sql += " AND stabw_apriori_streckenprop IS NULL"
|
||||
else:
|
||||
sql += " AND stabw_apriori_streckenprop = ?"
|
||||
params.append(stabw_apriori_streckenprop)
|
||||
|
||||
liste_genauigkeiten = cursor.execute(sql, tuple(params)).fetchall()
|
||||
|
||||
if liste_genauigkeiten == []:
|
||||
# Neuen Datensatz anlegen
|
||||
if stabw_apriori_konstant is not None and stabw_apriori_streckenprop is not None:
|
||||
cursor.execute(
|
||||
"INSERT INTO Genauigkeiten (instrumenteID, beobachtungsart, stabw_apriori_konstant, stabw_apriori_streckenprop) VALUES (?, ?, ?, ?)",
|
||||
(instrumenteID, beobachtungsart, stabw_apriori_konstant, stabw_apriori_streckenprop)
|
||||
)
|
||||
print(
|
||||
f"Die Genauigkeitsangabe für die Beobachtungsart {beobachtungsart} des Instrumentes {instrumentenname} wurde erfolgreich hinzugefügt.")
|
||||
|
||||
elif stabw_apriori_konstant is None and stabw_apriori_streckenprop is not None:
|
||||
elif stabw_apriori_konstant is None:
|
||||
cursor.execute(
|
||||
"INSERT INTO Genauigkeiten (instrumenteID, beobachtungsart, stabw_apriori_streckenprop) VALUES (?, ?, ?)",
|
||||
(instrumenteID, beobachtungsart, stabw_apriori_streckenprop)
|
||||
)
|
||||
print(
|
||||
f"Die Genauigkeitsangabe für die Beobachtungsart {beobachtungsart} des Instrumentes {instrumentenname} wurde erfolgreich hinzugefügt.")
|
||||
|
||||
elif stabw_apriori_streckenprop is None and stabw_apriori_konstant is not None:
|
||||
else:
|
||||
cursor.execute(
|
||||
"INSERT INTO Genauigkeiten (instrumenteID, beobachtungsart, stabw_apriori_konstant) VALUES (?, ?, ?)",
|
||||
(instrumenteID, beobachtungsart, stabw_apriori_konstant)
|
||||
)
|
||||
print(
|
||||
f"Die Genauigkeitsangabe für die Beobachtungsart {beobachtungsart} des Instrumentes {instrumentenname} wurde erfolgreich hinzugefügt.")
|
||||
|
||||
else:
|
||||
print("Die Genauigkeitsangabe ist bereits in der Datenbank vorhanden.")
|
||||
print(
|
||||
f"Die Genauigkeitsangabe für {beobachtungsart} (Instrument: {instrumentenname}) wurde erfolgreich hinzugefügt.")
|
||||
|
||||
con.commit()
|
||||
cursor.close()
|
||||
@@ -711,7 +699,7 @@ class Datenbankzugriff:
|
||||
return liste_instrumente
|
||||
|
||||
def get_alle_instrumente_liste(self: str) -> list:
|
||||
"""Liest alle Instrumente aus der Tabelle Instrumente.
|
||||
"""Liest alle Instrumente aus der Tabelle Instrumente auf.
|
||||
|
||||
Gibt eine Liste der gefundenen Instrumente zurück. Falls keine Instrumente vorhanden sind,
|
||||
wird eine Textausgabe mit verfügbaren Typen zurückgegeben.
|
||||
@@ -977,4 +965,52 @@ class Datenbankzugriff:
|
||||
con.close()
|
||||
return liste_varianzkomponenten
|
||||
|
||||
def tabelle_instrumente_aus_db(self) -> None:
|
||||
"""Stellt die in der Datenbank gespeicherten Instrumente tabellarisch dar.
|
||||
|
||||
Die Methode liest alle Datensätze aus der Tabelle Instrumente über die
|
||||
zugehörige Datenbankzugriffsmethode und erzeugt daraus einen pandas-DataFrame
|
||||
zur Anzeige im Notebook. Sind keine Instrumente vorhanden, wird ein Hinweistext
|
||||
ausgegeben, dass die Instrumente zuerst anzulegen sind.
|
||||
|
||||
:return: None
|
||||
:rtype: None
|
||||
"""
|
||||
liste_instrumente_in_db = self.get_alle_instrumente_liste()
|
||||
|
||||
# Prüfen, ob Datensätze in der Tabelle Instrumente enthalten sind
|
||||
if isinstance(liste_instrumente_in_db, list) and len(liste_instrumente_in_db) > 0:
|
||||
df_instrumente = pd.DataFrame(liste_instrumente_in_db, columns=['InstrumenteID', 'Typ', 'Bezeichnung'])
|
||||
display(df_instrumente.style.hide(axis='index'))
|
||||
|
||||
else:
|
||||
print(
|
||||
"Es wurden noch keine Instrumente angelegt. Bitte in der folgenden Zelle nachholen und diese Zelle erneut ausführen!")
|
||||
|
||||
def tabelle_genauigkeiten_aus_db(self) -> None:
|
||||
"""Stellt die a-priori Genauigkeiten der Beobachtungsgruppen tabellarisch dar.
|
||||
|
||||
Die Methode liest alle Einträge aus der Tabelle Genauigkeiten über die
|
||||
zugehörige Datenbankzugriffsmethode und erstellt eine
|
||||
übersichtliche Anzeige im Notebook. Liegen keine Genauigkeitsangaben vor,
|
||||
wird ein Hinweistext ausgegeben, dass die a-priori Genauigkeiten zunächst zu
|
||||
erfassen sind.
|
||||
|
||||
:return: None
|
||||
:rtype: None
|
||||
"""
|
||||
genauigkeiten_dict = self.get_genauigkeiten_dict()
|
||||
# Prüfen, ob Datensätze in der Tabelle Instrumente enthalten sind
|
||||
if genauigkeiten_dict == {}:
|
||||
print(
|
||||
"Es wurden noch keine apriori Genauigkeiten zu den Beobachtungsgruppen erfasst. Bitte in der folgenden Zelle nachholen und diese Zelle erneut ausführen.")
|
||||
else:
|
||||
formatierte_daten = list(genauigkeiten_dict.values())
|
||||
spalten = [
|
||||
'instrumenteID',
|
||||
'beobachtungsart',
|
||||
'stabw_apriori_konstant',
|
||||
'stabw_apriori_streckenprop'
|
||||
]
|
||||
df = pd.DataFrame(formatierte_daten, columns=spalten)
|
||||
display(df.style.hide(axis='index'))
|
||||
|
||||
Reference in New Issue
Block a user