sqlite SELECT Problem

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Wenn ich Daten aus der Datenbank folgendermaßen abrufe:

Code: Alles auswählen

import sqlite3

con=sqlite3.connect("test.db")
cur=con.cursor()
cur.execute ("SELECT bla1, bla2 FROM test")
print cur.fetchall()
Dann bekomme meine Ausgabe in folgender Struktur:

[(u'blabla', u'bla')]

Wie stelle ich es am besten an, dass ich einmal mein blabla in einer einzelnen Variable und mein bla in einer einzelnen variable habe, ohne das [(u'....', u'....')]???
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

"fetchall" gibt ein Tupel mit den einzelnen Reihen als Liste zurück.

Willst du das ausgeben, mach das per liste[index] oder iteriere über diese mit "for".
Schau dir mal A Byte of Python an, dir scheinen die Grundlagen zu fehlen.
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Das versteh ich nicht liste[0] gibt [(u'blabla', u'bla')] aus, also die ganze Ausgabe und liste[1] dann logischerweise nichts mehr. Das heist doch dann eig. das fetchall nicht die einzelnen Reihen als Liste zurück gibt? Oder hab ich jetzt alles falsch verstanden?

edit: Ahh es muss fetchone, nicht fetchall sein
Zuletzt geändert von gugugs am Sonntag 4. Januar 2009, 19:45, insgesamt 1-mal geändert.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Normalerweise sollte liste[0] nicht "[(u'blabla', u'bla')]" ausgeben, sondern "(u'blabla', u'bla')".
Wenn du jetzt noch liste[0][0] eingibst, dann verstehst du, wie das funktioniert.

Doch es gibt die einzelnen Reihen als Liste zurück. und drin sind wieder Tuple, die die Werte der einzelnen Spalten dieser Reihe beinhalten.
BlackJack

@gugus: Wenn bei `fetchall()` ``[(u'blabla', u'bla')]`` herauskommt, kann nicht das gleiche kommen wenn man auf das erste Element zugreift.
Antworten