Seite 1 von 1

Daten aus DB in einen Array speichern

Verfasst: Samstag 18. Februar 2017, 18:01
von danohomie
Hallo :)

Ich möchte Daten aus der Sqlite3 DB auslesen und diese in einen Array in Python schreiben. Momentan habe ich folgenden Ansatz:

Code: Alles auswählen

#Verbindung aufbauen
con = sqlite3.connect('test.db')

with con:
	cur= con.cursor()
	#Abfrage von DB
	cur.execute("SELECT name, MAC FROM Besucher")

	while True:
		row = cur.fetchone()

		if row == None:
			break

	#Und hier sollen die Daten in den Arrays "besucher" und "adresse" gespeichert werden. Leider funktioniert das nicht.
	besucher = row[0]
	adresse = row[1]
Fehlermeldung: TypeError: 'NoneType' object has no attribute '__getitem__' :K

Ich freue mich über eure Tips und Ratschläge :)

Dani

Re: Daten aus DB in einen Array speichern

Verfasst: Samstag 18. Februar 2017, 18:31
von snafu
Du hast die Schleife so programmiert, dass sie endet, wenn "row" None ist. Wieso sollte anschließend plötzlich etwas anderes als None an "row" gebunden sein? Und viel wichtigere Frage: Was hättest du in "row" an der Stelle erwartet?

Re: Daten aus DB in einen Array speichern

Verfasst: Samstag 18. Februar 2017, 18:33
von Sirius3
@danohomie: die Fehlermeldung ist doch klar. Du beendest die while-Schleife erst, wenn `row` None ist, und None erlaubt eben keinen Indexzugriff. Es ist übrigens unschön, wenn man zusammengehörige Daten in getrennten Listen (nicht Arrays) speichern will. Nimm eine Liste, wo jeder Eintrag ein Tuple mit (name, adresse) ist:

Code: Alles auswählen

#Verbindung aufbauen
con = sqlite3.connect('test.db')

with con:
    cur = con.cursor()
    cur.execute("SELECT name, mac FROM Besucher")
    besucher_mit_adresse = cur.fetchall()
Eingerückt wird übrigens mit 4 Leerzeichen pro Ebene.

Re: Daten aus DB in einen Array speichern

Verfasst: Sonntag 19. Februar 2017, 12:22
von danohomie
snafu hat geschrieben:Du hast die Schleife so programmiert, dass sie endet, wenn "row" None ist. Wieso sollte anschließend plötzlich etwas anderes als None an "row" gebunden sein? Und viel wichtigere Frage: Was hättest du in "row" an der Stelle erwartet?
Danke für dein Feedback, zu deiner Frage:
Ich hatte mir davor die Einträge mit print in der Shell ausgeben lassen, da war dann das Ergebniss eine Auflistung der Einträge untereinander. Daher dachte ich, dass so dann die Daten auch in die Liste geschrieben werden. :roll:


Sirius3 hat geschrieben:@danohomie: die Fehlermeldung ist doch klar. Du beendest die while-Schleife erst, wenn `row` None ist, und None erlaubt eben keinen Indexzugriff. Es ist übrigens unschön, wenn man zusammengehörige Daten in getrennten Listen (nicht Arrays) speichern will. Nimm eine Liste, wo jeder Eintrag ein Tuple mit (name, adresse) ist:

Code: Alles auswählen

#Verbindung aufbauen
con = sqlite3.connect('test.db')

with con:
    cur = con.cursor()
    cur.execute("SELECT name, mac FROM Besucher")
    besucher_mit_adresse = cur.fetchall()
Eingerückt wird übrigens mit 4 Leerzeichen pro Ebene.
Danke für deine Hilfestellung, mit dem Tuple hast du Recht. Allerdings erfordert der nachfolgende Code, dass die beiden erstmal getrennt werden (wahrscheinlich kann man den Tuple auch getrennt betrachten, möchte den Code jetzt aber erstmal zum laufen bringen).

Dein Beispielcode funktioniert prima und liefert auch fast das gewünschte Ergebniss, es ist nur vor jedem Eintrag ein u' :K Hatte das davor schonmal, weiß aber nicht mehr was ich anders gemacht hatte damit ich nur den Datensatz ohne u' bekomme.


Vielen Dank für eure Hilfe :)
Dani

Re: Daten aus DB in einen Array speichern

Verfasst: Sonntag 19. Februar 2017, 12:31
von BlackJack
@danohomie: Das u ist in der Zeichenkettendarstellung des Tupels. Damit Du als Programmierer erkennst das es sich um Unicode-Zeichenketten handelt. Da musst Du nichts weg bekommen.

Re: Daten aus DB in einen Array speichern

Verfasst: Sonntag 19. Februar 2017, 13:21
von danohomie
@BlackJack Danke für deine schnelle Antwort.

Das bedeutet ich kann es einfach ignorieren? Da ich die Liste nachher dursuchen will --> wird das u dann gar nicht beachtet?

Re: Daten aus DB in einen Array speichern

Verfasst: Sonntag 19. Februar 2017, 13:38
von BlackJack
@danohomie: Da ist genau so wenig ein u wie da Anführungszeichen in der Zeichenkette sind. (Es sei denn es sind wirklich Anführungszeichen in der Zeichenkette. :-))

Re: Daten aus DB in einen Array speichern

Verfasst: Sonntag 19. Februar 2017, 15:04
von danohomie
BlackJack hat geschrieben:@danohomie: Da ist genau so wenig ein u wie da Anführungszeichen in der Zeichenkette sind. (Es sei denn es sind wirklich Anführungszeichen in der Zeichenkette. :-))
Okay jetzt hab ich es vielen Dank!

Hab meinen Unicode in Ascii umgewandelt und dann funktioniert jetzt auch alles :D

Vielen Dank für eure schnellen Antworten!
Dani

Re: Daten aus DB in einen Array speichern

Verfasst: Sonntag 19. Februar 2017, 15:21
von Sirius3
@danohomie: das ist doch nicht Dein Ernst? Das ist keine Lösung. An welcher Stelle hattest Du denn ein Problem mit Unicode-Strings?

Re: Daten aus DB in einen Array speichern

Verfasst: Sonntag 19. Februar 2017, 15:56
von danohomie
Sirius3 hat geschrieben:@danohomie: das ist doch nicht Dein Ernst? Das ist keine Lösung. An welcher Stelle hattest Du denn ein Problem mit Unicode-Strings?
Mein Ursprungsproblem, welches der Grund für meinen Post war, war nach deiner Hilfestellung dann gelöst. :D

Der Skript zu dem der anfängliche Code gehörte funktioniert aber trotzdem noch nicht :roll: mit der der Umwandlung funktionierte dieser dann aber :)