Seite 1 von 1

Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 12:37
von pole23
Hallo zusammen,

ich hajetz mal angefangen, mich mit dem Zugriff auf Datenbanken unter Python zu beschäftigen. Das erstellen und befüllen von Tabellen ist soweit kein Problem. Jedoch habe ich eine Spalte, wo IP Adressen als Text hinterlegt sind. Diese möchte ich mit einer Eingabe überprüfen lassen, ob sich sie eingegebene IP Adresse in der Datenbank befindet. Wenn ich mir den Datensatz auslesen lasse, dann erhalte ich folgende Ausgabe:
('192.168.1.18',)

So kann ich das schlecht mit einer Eingabe vergleichen. Gibt es einen Weg, das ich als Ausgabe aus einer Datenbank nur den Wert, also 192.168.1.18 erhalte?

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 12:42
von EyDu
Hallo.

Das ist ein Tupel. Auf das erste Element kannst du ganz normal mit einem Index zugreifen. Wenn dir das nicht klar sein sollte, dann empfehle ich noch eine Runde Tutoriallesen.

Sebastian

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 12:43
von Rebecca
Was du da bekommst, ist ein Tupel, von dem du nun das erste Element haben willst...

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 12:45
von /me
pole23 hat geschrieben:('192.168.1.18',)

So kann ich das schlecht mit einer Eingabe vergleichen. Gibt es einen Weg, das ich als Ausgabe aus einer Datenbank nur den Wert, also 192.168.1.18 erhalte?
Das sieht aus, als ob du ein Tupel mit den abgefragten Werten zurückbekommst. Arbeite bitte das Tutorial durch und schau dir auch an, wie die von dir verwendete Datenbankschnittstelle funktioniert.

Für die schnelle Problembehebung sieh dir bitte folgenden Code an:

Code: Alles auswählen

values = ('192.168.1.18', )
print values[0]

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 12:57
von pole23
/me hat geschrieben:Arbeite bitte das Tutorial durch und schau dir auch an, wie die von dir verwendete Datenbankschnittstelle funktioniert.
Kannst du mir eins empfehlen?

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 13:06
von Rebecca

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 16:53
von ms4py
Also ich würde das mit Tupel-Unpacking lösen:

Code: Alles auswählen

>>> ip, = ('192.168.1.18', )
>>> ip
'192.168.1.18'
Du solltest dich auf jeden Fall noch, wie schon vorgeschlagen, mit den Grundlagen auseinandersetzen (=> Tutorial).

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 17:01
von Hyperion
ms4py hat geschrieben:Also ich würde das mit Tupel-Unpacking lösen:

Code: Alles auswählen

>>> ip, = ('192.168.1.18', )
>>> ip
'192.168.1.18'
Hm... schreibt man wirklich das Komma nach dem letzten Namen noch hin? Ist das so üblich in Python?

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 17:51
von DasIch
Hyperion hat geschrieben:Hm... schreibt man wirklich das Komma nach dem letzten Namen noch hin? Ist das so üblich in Python?
Kann man bei einem Element machen, allerdings würde ich statt dessen eher direkt über den Index auf das Element zugreifen.

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 17:54
von /me
Hyperion hat geschrieben:
ms4py hat geschrieben:

Code: Alles auswählen

>>> ip, = ('192.168.1.18', )
>>> ip
'192.168.1.18'
Hm... schreibt man wirklich das Komma nach dem letzten Namen noch hin? Ist das so üblich in Python?
Angesichts dessen was du bekommst wenn du es weglässt: Ja.

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 18:14
von BlackJack
Also ich finde Tupel-unpacking mit nur einem Namen zu subtil. Das übersieht man schnell. Hyperion's Antwort stützt das IMHO, denn er ist ja nicht gerade Anfänger und hat's anscheinend auch nicht sofort verstanden.

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 20:06
von /me
BlackJack hat geschrieben:Also ich finde Tupel-unpacking mit nur einem Namen zu subtil. Das übersieht man schnell.
Volle Zustimmung. Das ist hässlich.

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Mittwoch 21. Juli 2010, 20:52
von Hyperion
BlackJack hat geschrieben:Also ich finde Tupel-unpacking mit nur einem Namen zu subtil. Das übersieht man schnell. Hyperion's Antwort stützt das IMHO, denn er ist ja nicht gerade Anfänger und hat's anscheinend auch nicht sofort verstanden.
Ja, hab es tatsächlich in dem Moment nicht gerafft. Ich schiebs mal auf den Sommer :oops:

Ich selber habs aber bisher auch immer über Indexzugriff gelöst.

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Donnerstag 22. Juli 2010, 08:17
von noisefloor
Hallo,

@pole23: Wenn du mit Python-Modulen, die der Python DB API 2.0 folgen (was eigentlich die meisten tun) auf eine DB zugreifst, bekommst du immer ein Tuple oder eine Tuple von Tuplen (oder eine Liste von Tuplen) als Ergebnis zurück. Daher solltest du dich mit dem Zugriff auf Tuple / Listen beschäfitgen (muss du aber so oder so, wenn du effektiv mit Python arbeiten willst ;-) ).

Ein Tuple mit nur einem Wert als Inhalt mag zwar so wenig sinnvoll erscheinen, aber sobald du ein Ergebnis mit mehreren Werten bekommst macht das durchaus Sinn. Z.B. weil du dann direkt über die Ergebnisse iterieren kannst.

Gruß, noisefloor

Re: Probleme mit Ausgabe von Datebsätzen bei Sqlite3

Verfasst: Donnerstag 22. Juli 2010, 08:40
von noisefloor
Hallo,

BTW, wenn du "nur" wissen willst, ob ein Wert in einer DB ist oder nicht, dann brauchst du das Ergebnis nicht wirklich auswerten, es reicht der Rückgabewert des 'execute'-Statements:

Code: Alles auswählen

import sqlite3

conn = sqlite3.connect('meinedb.db')
c = conn.cursor()
if c.execute("SELECT true FROM meinetablelle WHERE ip = 'meineIP'"):
    print 'IP vorhanden'
else:
    print 'IP nicht vorhanden'
conn.close()
Gruß, noisefloor