Seite 1 von 1
sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 14:43
von RichardeRicharde
Hallo Zusammen,
gibt es eine sichere Variante, welche SQLinjection verhindert, die es ermöglichte eine Tabelle anzulegen mit durchnummerierten Spalten?
Code: Alles auswählen
self.m_coursor.execute("""CREATE TABLE ergebnisse (
Spalte_1 integer,
Spalte_2 integer,
Spalte_3 integer,
)""")
Ich würde mich sehr über Antworten freuen - vielen Dank.
Richarde
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 14:49
von __deets__
Nein. DDL ist nicht parametrisch, nur DML, also Abfragen. Und allgemein ist es ein starker code smell wenn man dynamisch Tabellen anlegen will. Dafür gibt es eigentlich nie einen Grund. Warum glaubst du das tun zu müssen?
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 15:00
von RichardeRicharde
Danke für Deine Antwort.
Für ein Rechenspiel möchte ich die Ergebnisse von Spielern speichern.
Das Datenmodell könnte so aussehen:
- Spieler
- Datum
- Uhrzeit
- Reihe (Anmerkung: des 1x1)
- Ergebnis_1
- Richtig_1
- Zeit_1
- Ergebnis_2
- Richtig_2
- Zeit_2
- Ergebnis_3
- Richtig_3
- Zeit_3
...
durch Deine Frage bin ich noch auf diese Variante gekommen:
- Spieler
- Datum
- Uhrzeit
- Reihe (Anmerkung: des 1x1)
- Faktor
- Ergebnis
- Richtig
- Zeit
Beide Varianten haben Ihre Vor- und Nachteile - Deinem Kommentar entnehme ich aber es wäre Variante 2 zu bevorzugen.
Wenn ich so drüber Nachdenke sind deren angeblich Nachteile für mein Projekt zu vernachlässigen.
Vielen Dank und viele Grüße
Richarde
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 15:27
von Sirius3
@RichardeRicharde: das Äquivalent zu durchnummerierten Spalten ist eine weitere Tabelle.
Die Tabelle `ergebnis_spiel` mit den Spalten ID, Spieler, Datum Uhrzeit` und eine Tabelle `ergebnis_runde` mit den Spalten ID, spiel_id, runden_nummer, Ergebnis, Richtig und Zeit.
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 15:28
von __deets__
Ich weiss nicht so genau was du da als Nachteile empfindest. Aber die richtige Art, sowas zu modellieren, sieht mehrere Tabellen und 1:n-Beziehungen zwischen denen vor. Also zB
Code: Alles auswählen
table Spieler
id
name
table Aufgabe
id
beschreibung
ergebnis
table Versuch
spieler_id
aufgaben_id
zeitstempel
ergebnis
Dann ergibt sich zb die Antwort danach, ob der Versuch erfolgreich war, aus einem join ueber Aufgabe und Versuch
Code: Alles auswählen
select a.ergebnis == v.ergebnis for aufgabe as a, versuch as v where a.id == v.aufgaben_id
Da fehlt natuerlich noch eine Menge an Details.
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 15:56
von RichardeRicharde
Vielen Dank für Deine fundierte Antwort.
__deets__ hat geschrieben: Montag 17. Januar 2022, 15:28
die richtige Art, sowas zu modellieren, sieht mehrere Tabellen und 1:n-Beziehungen zwischen denen vor. Also zB
Code: Alles auswählen
table Spieler
id
name
table Aufgabe
id
beschreibung
ergebnis
table Versuch
spieler_id
aufgaben_id
zeitstempel
ergebnis
Macht es Sinn die Spalten ID in den ersten Tabellen einzuführen?
Man könnte ja in der Tabelle Versuch die Zuordnung auch über den eindeutigen Namen herstellen wenn sicher ist das es diesen in der führenden Tabelle nur genau ein mal geben kann?
Oder hat id noch Vorteile die ich jetzt übersehe?
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 15:59
von sparrow
Du solltest dich belesen, was
Normalisierung bei Datenbanken ist. Das wird automatisch viele deiner Fragen beantworten.
Edit: Zumindest gehe ich davon aus, weil das auch die "Beziehungen" zwischen Relationen verdeutlicht.
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 16:12
von __deets__
Ich persönlich arbeite immer mit IDs, und gerade bei Personen sehe ich dazu auch keine Alternative. Es gibt nunmal eine Menge Pamela Chantal Müllers. Und compound IDs sind (Achtung, Meinung) mir zu nervig. Wenn das zwei oder drei Werte werden, ist das ja anstrengend, die durch die Gegend zu schleppen.
Anders sieht das natürlich aus, wenn sich da etwas natürliches anbietet. ISO-Ländercodes, Standortnamen, Raumnummern (wenn sie fest sind). Aber wirklich einen Fehler macht man mit IDs in meinen Augen fast nie.
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 16:13
von RichardeRicharde
Ich Danke Dir für Deine Erklärungen und Deine Geduld,
leider ist mir noch nicht ganz klar warum ich folgende Form
Code: Alles auswählen
table Spieler
id
name
table Aufgabe
id
reihe
faktor
beschreibung
ergebnis
table Versuch
spieler_id
aufgaben_id
zeitstempel
ergebnis
Der Form
Code: Alles auswählen
table Spieler
name [unique primary key]
table Aufgabe
id
reihe
faktor
beschreibung
ergebnis
table Versuch
spieler_name
aufgaben_id
zeitstempel
ergebnis
vorziehen sollte?
Ich merke aber schon beim schreiben das es zum Beispiel in der Tabelle Aufgabe von Vorteil sein wird auf ID zu wechseln, da sich dann die Beziehung im Join besser herstellen lässt.
EDIT: mit Deinem letzten Post der in der Zwischenzeit gepostet wurde, ist mir das nun auch klar. Ich Danke nochmals für die Ausführlichen Erklärungen und bin froh wieder etwas gelernt zu haben.
Danke und viele Grüße
Richarde
Re: sichere Variante Tabelle in SQLite mit Variablen Spaltennamen zu erstellen?
Verfasst: Montag 17. Januar 2022, 16:25
von __blackjack__
Wobei insbesondere Namen auch nicht fest sind. Da heiratet mal jemand oder ändert das Geschlecht und damit auch den Vornamen und schon ist der Name nicht mehr derselbe und müsste in anderen Tabellen angepasst werden.