Seite 1 von 1

Zeile innerhalb eines Listen-Arrays mit einem String finden

Verfasst: Dienstag 6. Januar 2015, 00:03
von der_Mausbiber
Nabend,

ich lese in einem Python-Script mehrere Datenbankeinträge in eine Liste ein:

Code: Alles auswählen

mysql_cursor.execute("SELECT * FROM switches WHERE raspi_devices_id = %s", raspberry_pi_id)
switches = mysql_cursor.fetchall()
Jetzt steht in switches sowas wie

Code: Alles auswählen

([1, "switchA", "befehlA"],[2, "switchB", "befehlB"],[3, "switchC", "befehlC"])
Mein Problem, ich würde z. Bsp. gerne nach dem Begriff "befehlB" suchen und dann, wenn die Suche erfolgreich ist auf die entsprechende Zeile zugreifen können.

Code: Alles auswählen

ergebniss=switches.SUCHEN("befehlB")
print(ergebniss[1])
das Ergebnis sollte in dem Beispiel dann "switchB" heißen.

Wie ich das mit einer Schleife selbst löse weiß ich, ich hatte aber auf eine elegantere Art gehofft.

Leider scheint der ".index()" Befehl hier nicht zu funktionieren.

Und bei der Überschrift bin ich mir auch nicht ganz sicher, glaube das ich hier von einem Tuple spreche und nicht von einem Listen-Array (gibt es das überhaupt?).

Re: Zeile innerhalb eines Listen-Arrays mit einem String fin

Verfasst: Dienstag 6. Januar 2015, 00:07
von Sirius3
@der_Mausbiber: zum Suchen solltest Du die Datenbank benutzen, denn dafür ist die da:

Code: Alles auswählen

mysql_cursor.execute("SELECT * FROM switches WHERE raspi_devices_id = %s AND befehl=%s", (raspberry_pi_id, "befehlA"))
befehlA = mysql_cursor.fetchone()

Re: Zeile innerhalb eines Listen-Arrays mit einem String fin

Verfasst: Dienstag 6. Januar 2015, 11:23
von der_Mausbiber
Okay, klar, ich wollte aber vermeiden jedesmal eine Datenbank-Abfrage zu starten und hatte gehofft es gibt einen dem ".index" vergleichbaren Befehl.

Was ist den in der Ausführung schneller?
Jedesmal eine Datenbankabfrage oder den Tuple per Schleife durchsuchen?

Re: Zeile innerhalb eines Listen-Arrays mit einem String fin

Verfasst: Dienstag 6. Januar 2015, 11:27
von BlackJack
@der_Mausbiber: Das kann man so allgemein nicht sagen. Das hängt unter anderem von der Datenmenge ab. Bei kleinen Datenmengen ist es egal, weil da beides schnell genug sein wird, bei grösseren Datenmengen kann man bei einer Datenbankabfrage aber einfach an der Datenbank schrauben, zum Beispiel Indexe anlegen oder ein anderes DBMS verwenden, während man bei einer Suche nach dem Tupel im Code sich eine andere Datenstruktur überlegen und an mehreren Stellen den Code umschreiben muss. Deshalb würde ich suchen in der Datenbank auch tatsächlich die Datenbank erledigen lassen. Wie Sirius3 schon schrieb: Dafür sind Datenbanken da. Wenn man das nicht nutzt, könnte man auch CSV-Dateien verwenden und alles selber programmieren.

Re: Zeile innerhalb eines Listen-Arrays mit einem String fin

Verfasst: Dienstag 6. Januar 2015, 11:39
von Sirius3
@der_Mausbiber: ist Geschwindigkeit ein Problem für Dich? ist diese Stelle dafür verantwortlich? ist vielleicht das Design Deines Programms das Problem? Wenn Du und ein unabhängiger Experte zum Ergebnis kommt, dass Datenbankabfragen zu langsam sind, dann kannst Du versuchen, eine schnellere Lösung zu finden.

Re: Zeile innerhalb eines Listen-Arrays mit einem String fin

Verfasst: Dienstag 6. Januar 2015, 14:47
von der_Mausbiber
ist Geschwindigkeit ein Problem für Dich?
Eigentlich nicht, das Script läuft auf einem Raspberry Pi und da hatte ich subjektiv das Gefühl das Datenbankzugriffe langsamer wären.
Wie gesagt, rein subjektiv. Deshalb auch meine Frage was schneller ist.

Mit der Antwort kann ich auf jeden Fall etwas anfangen und werde es dann so machen wie Ihr beide gesagt habt, über eine Datenbankabfrage.