Wie Informationen am sinnvollsten speichern, wenn über jedes Stichwort Zugriff

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Scholastik
User
Beiträge: 53
Registriert: Freitag 7. Juli 2017, 12:35

Hi :)

Ich würde gerne informationen speichern und über jedes stichwort (key) Zugriff auf die dazugehrigen infos bekommen.

Beispiel:
Nehmen wir mal die Tierwelt, wir haben folgende Informationen:
{"Name":"Hund", "Farbe":"grau", "Klasse":"Säugetier", ...}
{"Name":"Katze", "Farbe":"braun", "Klasse":"Säugetier", ...}
{"Name":"Fisch", "Farbe":"grün", "Klasse":"Nicht-Säugetier", ...}

Dies möchte ich so abspeichern, dass mir über das Stichwort "Säugetier" nun alle einträge mit säugetier ausgegeben werden (also die beiden dictionaries mit hund und katze). Oder ich such nach hund dann wird mir nur der hund eintrag ausgegeben usw.
Dh. ich komme sowohl über das stichwort "hund" als auch über das Stichwort "grau" an den eintrag über den Hund. Zusätzlich kann ich aber auch an mehrere einträge kommen, falls es wie Säugetier in mehreren vorkommt. Dies dann wohl in einer Liste mit einträgen ausgeben?

Wie setze ich das am besten um? Oder gibts da vllt sogar schon ein fertiges modul für?

editiert:
Natürlich ist es auch okay, wenn ich statt nach "Säugetier" nach "Klasse+Säugetier" oderso suchen muss. Also ich gebe mit an, dass ich nach einer Klasse suche, oder nach einem Namen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Scholastik: arbeite Dich in das Thema `Datenbank` ein. Python bringt SQLite als Modul mit.
Scholastik
User
Beiträge: 53
Registriert: Freitag 7. Juli 2017, 12:35

Sirius3 hat geschrieben:@Scholastik: arbeite Dich in das Thema `Datenbank` ein. Python bringt SQLite als Modul mit.
okay. Und wie schnell ist so eine Datenbank im Vergleich zu einem dictionary?

Angenommen ich könnte das Problem vereinfachen, so dass zb nur Klasse mehrfach vorkommen kann und alle anderen Informationen einzigartig sind.
Dann könnte ich ja auch ein dictionary mit:
Tiere = {"Säugetier":{"Hund":{"Name":"Hund", "Farbe":"grau"},"Katze":{"Name":"Katze", "Farbe":"braun"},"grau":{"Name":"Hund", "Farbe":"grau"},"braun":{"Name":"Katze", "Farbe":"braun"}},"Nicht_Säugetier":{"Fisch":{"Name":"Fisch", "Farbe":"grün"},"grün":{"Name":"Fisch", "Farbe":"grün"}}}
machen.

So hätte ich mein etwas eingeschränkteres Ziel ebenfalls erreicht, wenn auch etwas umständlich. Ist dies schneller/besser als eine datenbank, wenn auch unnötig kompliziert? Ich würde gerne die schnellste/beste Methode verwenden.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Scholastik: Natürlich kannst Du Dir für jede Kombination neue Wörterbücher erzeugen, das ist aber weder effektiv noch schnell noch gut.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum diese Hatz nach schnellste? Hast du so viele Daten, das es wirklich kneift? Und “beste” ist das schonmal gar nicht. Denn eine solche Beurteilung kann immer nur durch Abwägung von Nutzungsszenarien erfolgen. Eine Art der Abfrage mag schneller sein, andere langsamer.
Scholastik
User
Beiträge: 53
Registriert: Freitag 7. Juli 2017, 12:35

Sirius3 hat geschrieben:@Scholastik: Natürlich kannst Du Dir für jede Kombination neue Wörterbücher erzeugen, das ist aber weder effektiv noch schnell noch gut.
okay, dachte ein dictionary wäre evlt schneller als ständig auf eine Datei (.db) zuzugreifen.
Mehrere Programme können sich den Zugriff auf so eine Datenbank Datei teilen? Was wenn ein Programm die Datenbank ändert, während ein anderes darauf zugreift? Oder geht kein gleichzeitiger Zugriff?

Eine .db Datei ist einer .txt datei zum abspeichern von Infos vorzuziehen nehme ich mal an?

Ich würde mich gerne darüber einlesen was genau die unterschiede sind, bzw ein Tutorial zum thema sqlite und python. Doch die Suche nach "python sqlite tutorial deutsch" spuckt leider nur https://www.python-kurs.eu/sql_python.php aus, was ziemlich wenige Fragen beantwortet und eher weniger für jemanden geeignet ist, der keine Ahnung von Datenbanken hat. Würde es wirklich lieber auf deutsch lesen. Ein komplexes Thema ist ohne Übersetzungsprobleme schon schwierig genug =/

Besonders würde mich natürlich auch interessieren ab welchem Punkt man zu einer .db greift, wann eher zu einer txt Datei und wann eher zu einem stinknormalen dictionary.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

solange du kein nachweisliches Geschwindigkeitsproblem hast ist es Zeitverschwendung, sich über Geschwindigkeit Gedanken zu machen.
Mehrere Programme können sich den Zugriff auf so eine Datenbank Datei teilen? Was wenn ein Programm die Datenbank ändert, während ein anderes darauf zugreift? Oder geht kein gleichzeitiger Zugriff?
Das ist kein Problem. Du kannst auch Daten in der DB aktuallisieren und alle Programm, die Zugreifen, sehen bein der nächsten Abfrage die neuen Daten. Das ist bei einem Dict, was zwischen mehreren Programmen geteilt wird, schwieriger.
Eine .db Datei ist einer .txt datei zum abspeichern von Infos vorzuziehen nehme ich mal an?
Datenbanken benutzen ihr eigene(n) Datei(en), wenn du ein Dict speichern willst, wäre `pickle` ein Wahl statt der Umweg über eine Texdatei. Oder alternativ die Daten im JSON-Form zu speichern.
Würde es wirklich lieber auf deutsch lesen.
1. Vergiß' www.python-kurs.eu - die Seite ist an vielen Stellen stark suboptimal und zeigt falsches / nicht-ideomatisches Python. 2. Ohne Englisch kommst du nicht weit, weil Englisch nun mal die Sprache zur Dokumentation von Python (und anderen Programmiersprachen) ist.

Dein Problem ist auch eher nicht die SQLite Anbindung von Python, weil das ist simpel. Dein Problem ist, dass du erst SQL lernen und verstehen muss. Zumindest die CRUD Grundlagen - Create, Read, Update, Delete. Weil du mit Python dann auch "nur" die SQL-Befehle an die Datenbank schickst und dann mit Python erst das Ergebnis der Abfrage weiter verarbeitest. Zu SQL-Grundlagen solltest du auch genug deutschsprachigen Lesestoff im Netz finden.
Besonders würde mich natürlich auch interessieren ab welchem Punkt man zu einer .db greift, wann eher zu einer txt Datei und wann eher zu einem stinknormalen dictionary.
Kommt drauf an. Z.B. wie man wo die Daten benötigt, was man wie Abfragen will, welche Datenpersistenz man braucht etc.

Gruß, noisefloor
Antworten