MySQL Datensatz auslesen und in Variable speichern

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
tzabbi

Moin Leute,

ich möchte Ein "Alarmsystem" basteln und deshalb die Tempertur und Luftfeuchtigkeitsdaten aus einer mySQL-Datenbank ziehen.
Das klappt auch ganz gut.
Jetzt hab ich nur die Frage wie ich diese Variable in einen Integer umwandeln kann, sodass ich damit rechnen kann.
Hier mein Skript:

Code: Alles auswählen

import mysql.connector as mc
connection = mc.connect(host = "host" 
					user = "user"
					passwd = "passwd"
					db = "database"
				
cursor.connection.cursor()
cursor.execute("""SELECT temp from daten LIMIT 1""")
result = cursor.fetchall()
cursor.close()

print result
Als Ergebnis bekomme ich immer dann "[(26.2,)]"

Wie kann ich nur die "26.2" in eine Variable speichern und damit rechnen?

Gruß
tzabbi
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

fetchall liefert *ALLE* Ergebniss, und damit immer eine Liste. Wenn du nur eine Zeile brauchst oder bekommst, kanns du stattdessen fetchone verwenden. Damit bleibt dann eine Zeile ueber, und die ist IMMER ein Tupel, also eine Aufzaehlung von Werten. Auch wenn es nur einer ist. Du musst da also dann drauf zugreifen, zb mit

Code: Alles auswählen

# das Komma ist wichtig!
wert, = cursor.fetchone()
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@tzabbi: zusätzlich, zu dem was __deets__ geschrieben hat, Datensätze in einer Tabelle haben keine Reihenfolge, `LIMIT 1` liefert also eine zufällige Temperatur (auch bei Datenbanken sind kryptische Abkürzungen nichts zu suchen, als `temperature` statt `temp`). Also brauchst Du irgendein Sortierkriterium.
tzabbi

__deets__ hat geschrieben:fetchall liefert *ALLE* Ergebniss, und damit immer eine Liste. Wenn du nur eine Zeile brauchst oder bekommst, kanns du stattdessen fetchone verwenden. Damit bleibt dann eine Zeile ueber, und die ist IMMER ein Tupel, also eine Aufzaehlung von Werten. Auch wenn es nur einer ist. Du musst da also dann drauf zugreifen, zb mit

Code: Alles auswählen

# das Komma ist wichtig!
wert, = cursor.fetchone()
Super Vielen Dank!
Das mit dem Komma war echt ein guter Hinweis.
tzabbi

Sirius3 hat geschrieben:@tzabbi: zusätzlich, zu dem was __deets__ geschrieben hat, Datensätze in einer Tabelle haben keine Reihenfolge, `LIMIT 1` liefert also eine zufällige Temperatur (auch bei Datenbanken sind kryptische Abkürzungen nichts zu suchen, als `temperature` statt `temp`). Also brauchst Du irgendein Sortierkriterium.
Ja sehe es grad, hab das "Order by" vergessen. :oops:
tzabbi

__deets__ hat geschrieben:fetchall liefert *ALLE* Ergebniss, und damit immer eine Liste. Wenn du nur eine Zeile brauchst oder bekommst, kanns du stattdessen fetchone verwenden. Damit bleibt dann eine Zeile ueber, und die ist IMMER ein Tupel, also eine Aufzaehlung von Werten. Auch wenn es nur einer ist. Du musst da also dann drauf zugreifen, zb mit

Code: Alles auswählen

# das Komma ist wichtig!
wert, = cursor.fetchone()
Wenn ich jetzt den Ganzen Datensatz auslesen möchte und damit die Liste mehere Einträge bekommt, wie kann ich dann die einzelnen Werte aus der Liste auswählen? "result[n]," bringt mir eine Fehlermeldung.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann hast du das mit dem Komma noch nicht verstanden. Schau mal nach dem Begriff tuple unpacking — das erkärt das.
Antworten