sql abfragen in variablen

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
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

mydb = mysql.connector.connect( host="localhost", user="root", password="eadmin", database="svw" )

mycursor = mydb.cursor()
sql = "SELECT dbvmglid, dbvmgl01, dbvmgl02, dbvmgl13, dbvmgl14 FROM dbvmgl WHERE dbvmgl17 = %s"
adr = (card, )
mycursor.execute(sql, adr)
for row in myresult:
print (row)
Ausgabe
1234
Ich
Du
0110
1001
meine Versuch t0 = row[0]
usw.. alles fehl geschlagen

Wie bekomme meine Ausgane in Variablen ?
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

myresult ist gar nicht definiert. Also kann es keine Ausgabe geben.
Lass diese my-Präfixe weg, die haben Null Informationsgehalt. Ich hoffe mal, das ist nicht die wirkliche Tabelle, denn die Feldnamen sind schrecklich. Benutze sprechende Namen auch in Datenbanken und vor allem keine kryptischen Abkürzungen oder durchnummerierte Namen.

Was ist der wirkliche Code den Du ausführst, was hast Du versucht und was ist die Fehlermeldung, die Du bei row[0] bekommst?
co-se
User
Beiträge: 20
Registriert: Dienstag 20. Oktober 2020, 13:36

Nachtrag
hatte es wohl nicht hier in übertragen
die tabellen namen wurden mir so vorgegeben ( waren schon da )
mycursor = mydb.cursor()
sql = "SELECT dbvmglid, dbvmgl01, dbvmgl02, dbvmgl13, dbvmgl14 FROM dbvmgl WHERE dbvmgl17 = %s"
adr = (card, )
mycursor.execute(sql, adr)
myresult = mycursor.fetchone()
for row in myresult:
print (row)
hoffe nichts vergessen
Ausgabe
1234
Ich
Du
0110
1001
Bishier alles ok, falls ich wieder was vergesseb haben sollte
laut Internet und Buch
sollte ich
hans = row[0]
print (hans)
print (row[0])
Ausgabe
1234
1234
erhalten
aber ist nicht
Benutzeravatar
sparrow
User
Beiträge: 4529
Registriert: Freitag 17. April 2009, 10:28

.fetchone() liefert dir, wie der Name schon sagt, _einen_ Datensatz. Wenn du über den iterierst, bekommst du seine einzelnen Felder. "row" ist also kein Datensatz, sondern ein Feld in einem Datensatz.

An der Stelle steht sicher etwas Anderes im Buch.
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Frage, die Du Dir stellen mußt, ist ob es wirklich nur immer ein Ergebnis der Abfrage geben kann. Das kann man schlecht sehen, weil die Namen wirklich schlecht sind. adr? ard? zdf? Warum ist das irgendwelche Karte? Und warum soll diese Karte gerade im Feld mit der Nummer 17 stehen?
Und dann ist es wichtig, diese kryptischen Namen möglichst schnell in was sinnvolles umbenennen.

Code: Alles auswählen

cursor = mydb.cursor()
cursor.execute("SELECT dbvmglid, dbvmgl01, dbvmgl02, dbvmgl13, dbvmgl14 FROM dbvmgl WHERE dbvmgl17 = %s", [card_id])
vereinsmitglied_id, vorname, nachname, anzahl_weiswuerste, liter_bier = cursor.fetchone()
Und schon hast Du die Werte in aussagekräftigen Variablen.
Benutzeravatar
__blackjack__
User
Beiträge: 14005
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich empfehle ja immer gerne SQLAlchemy wenn es um RDMS geht. Hier alleine schon deswegen damit man mit dem ORM dafür sorgen kann, dass man nur an einer Stelle im Programm diese furchtbaren Namen aus der Datenbank hat, und ab da dann Aussagekräftiges. 🙂
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Antworten