Zeile innerhalb eines Listen-Arrays mit einem String finden

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
der_Mausbiber
User
Beiträge: 72
Registriert: Donnerstag 2. Oktober 2014, 09:51

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?).
Sirius3
User
Beiträge: 17830
Registriert: Sonntag 21. Oktober 2012, 17:20

@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()
der_Mausbiber
User
Beiträge: 72
Registriert: Donnerstag 2. Oktober 2014, 09:51

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?
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.
Sirius3
User
Beiträge: 17830
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
der_Mausbiber
User
Beiträge: 72
Registriert: Donnerstag 2. Oktober 2014, 09:51

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.
Antworten