Daten von Tupeln aus einer Liste einzeln darstellen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
KauliM
User
Beiträge: 4
Registriert: Samstag 2. Oktober 2021, 14:39

Samstag 2. Oktober 2021, 15:19

Hallo,
bin der Kauli und möchte hier mal eine Frage stellen, bin gerade dabei mich mit
Python und sqlite anzufreunden. (Anfänger mit Ambitionen )
Folgende Funktion ist lauffähig und bringt auch Daten allerdings in einer Liste mit
mehreren Tupeln darin, habe mich da ein wenig festgefahren.
Ich bekomme die Ausgabe nicht so hin, wie ich es gerne hätte, ich hoffe als alte Hasen könnt Ihr mir da weiterhelfen.
Im Codeblock stehen die Ausgaben in Docstrings.......... vielen Dank erst mal im voraus

Code: Alles auswählen

import os, sys, sqlite3


def auslese():
    verbindung= sqlite3.connect("geburtstage.db")
    zeiger = verbindung.cursor()
    zeiger.execute("SELECT nachname, geburtstag FROM personen")
    inhalt = zeiger.fetchall()
    print(type(inhalt))
    print(inhalt)
    verbindung.close()
    
    
    
#Was die Funktion macht:
#Sie gibt die Daten als Liste aus mit mehreren Tupeln als Inhalt
"""
So wird es ausgegeben

[('Schiller', '10.11.1759'), ('Hegel', '27.08.1770'), ('Hölderlin', '20.03.1770'), ('Virchow', '13.10.1821'), ('Goethe', '28.08.1749')]

"""
#Was ich als Ausgabe sehen möchte:
#Die Daten aus den Tupeln heraus einzeln darstellen
"""
Schiller geboren :10.11.1759
Hegel  geboren: 27.08.1770
Hölderlin  geboren: 20.03.1770

"""
Sirius3
User
Beiträge: 15146
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 2. Oktober 2021, 16:57

os und sys werden importiert, aber gar nicht benutzt. Die können also weg.
for-Schleifen und Formatstrings sagen Dir was?
Die komplizierte Leerzeichensetzung wird ein Problem werden: nach welchen Regeln werden mal eine und mal zwei Leerzeichen zwischen Name und "geboren" gesetzt und wann ist vor dem Doppelpunkt und wann nach dem Doppelpunkt ein Leerzeichen?
Benutzeravatar
KauliM
User
Beiträge: 4
Registriert: Samstag 2. Oktober 2021, 14:39

Samstag 2. Oktober 2021, 18:15

Hi sirius3,
danke für die schnelle Antwort.
die Leerzeichen sollten so aussehen, dh. hinter jedem Wert ein Leezeichen,
hinter dem "geboren"auch eines.

Schiller geboren: 10.11.1759
Hegel geboren: 27.08.1770
Hölderlin geboren: 20.03.1770

for-Schleifen sagen mir was, die Formatstrings noch nicht so ganz..

mein ansatz war folgender:
erst alle Klammern entfernen, danach die Daten aus den Tupeln, ich dachte an string und split.
Das war von wenig Erfolg gekrönt.

Sollte dieser Beitrag doppelt auftauchen, dann bitte einen löschen
__deets__
User
Beiträge: 10485
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 2. Oktober 2021, 18:25

Da muss keine Klammer entfernt werden. Da muss einfach nur über die Liste iteriert werden, und die beiden Werte Name und Geburtstag aus dem Tupel geholt werden. Wie man mit Listen, Tupelo und formatstrings umgeht, steht im offiziellen Tutorial.
Benutzeravatar
KauliM
User
Beiträge: 4
Registriert: Samstag 2. Oktober 2021, 14:39

Samstag 2. Oktober 2021, 22:45

Hi Leuts,
vielen Dank für die schnelle Hilfe..... ich habe es hinbekommen.
Die Daten werden jetzt genau so ausgegeben wie ich es wollte,
bin immer über die for Schleife gestolpert.

for x in inhalt:
print(x[1],'\n',x[0],x[2])

ich denke das geht noch besser, im Moment ist das aber schon mal ein Erfolg
für den Anfänger mit Ambitionen


Grüsse
Kauli
rogerb
User
Beiträge: 639
Registriert: Dienstag 26. November 2019, 23:24

Sonntag 3. Oktober 2021, 09:41

@KauliM,

das entspricht ja nicht ganz deinem ersten Post. Hast du noch eine dritte Spalte aus der Tabelle aus gelesen?

Die Liste die dir von fetchall zurück gegeben wird, ist eine Liste von Tupeln. Diese kann man beim Iterieren bequem in aussagekräftige Namen entpacken:

Code: Alles auswählen

for name, geburtsdatum, andere_spalte in inhalt:
    print(f"{name} geboren: {datum}  - {andere_spalte"
Mit dem vorgestellten f kann man variablen einfach in einen string einfügen. Dafür muss man die Variable nur in { } Klammern einfügen.
Benutzeravatar
KauliM
User
Beiträge: 4
Registriert: Samstag 2. Oktober 2021, 14:39

Sonntag 3. Oktober 2021, 16:09

rogerb hat geschrieben:
Sonntag 3. Oktober 2021, 09:41
@KauliM,

das entspricht ja nicht ganz deinem ersten Post. Hast du noch eine dritte Spalte aus der Tabelle aus gelesen?

----> Das habe ich leider verwechselt :lol: dieser Code war für eine andere Funktion

Die Liste die dir von fetchall zurück gegeben wird, ist eine Liste von Tupeln. Diese kann man beim Iterieren bequem in aussagekräftige Namen entpacken:

Code: Alles auswählen

for name, geburtsdatum, andere_spalte in inhalt:
    print(f"{name} geboren: {datum}  - {andere_spalte"
Mit dem vorgestellten f kann man variablen einfach in einen string einfügen. Dafür muss man die Variable nur in { } Klammern einfügen.
----> Das sieht sehr gut aus , danke Dir :wink: und wieder einiges dazu gelernt ...

grüsse
Kauli
Antworten