Datum & SQL

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Joe-Waschl
User
Beiträge: 20
Registriert: Freitag 12. November 2010, 20:18

habs :oops: thx

Name hatte in der execute... gefehlt
...SELECT Anschrift_ID, Name, Nachname, Straße, PLZ, Ort, Telefon, Handy, email,
DATE_FORMAT(Geburtstag, '%%d.%%m.%%Y') AS Geburtstag FROM Anschrift where Name = %s...

danke für die hilfe :D
BlackJack

@Joe-Waschl: Die beiden Funktionen enthalten zu viel fast identischen Code. So etwas sollte man vermeiden, weil es fehleranfällig ist wenn man mal etwas verändern will oder muss und das dann in jeder „Kopie” machen muss und auch auf die selbe Weise.

Das mit der Liste ist umständlich gelöst. Statt eine leere zu erstellen und dann ein einziges Element anzuhängen hätte man auch gleich eine literale Liste mit `eingabe` als einzigem Element hinschreiben können. Und das auch gleich als Argument beim `execute()`-Aufruf ohne es noch mal an einen Namen binden zu müssen. Die Klammern dort um die `eingabe` beziehungsweise `liste_eingabe` sind unnötig und sollten weggelassen werden.
Joe-Waschl
User
Beiträge: 20
Registriert: Freitag 12. November 2010, 20:18

habs geändert ;)

Code: Alles auswählen

def namen(db):
    eingabe = [raw_input('Namen: ')]
    cur = db.cursor()
    cur.execute("""SELECT Anschrift_ID, Name, Nachname, Straße, PLZ, Ort, Telefon, Handy, email, 
    DATE_FORMAT(Geburtstag, '%%d.%%m.%%Y') AS Geburtstag FROM Anschrift where Name = %s""", (eingabe))
    for row in cur.fetchall():
        print '---------------------'
        print 'Nr.:       ', row[0]
        print 'Name:      ', row[1]
        print 'Nachname:  ', row[2]
        print 'Straße:    ', row[3]
        print 'PLZ:       ', row[4]
        print 'Ort:       ', row[5]
        print 'Telefonnr.:', row[6]
        print 'Handy:     ', row[7]
        print 'Email:     ', row[8]
        print 'Geburtstag:', row[9]
        print '----------------------'
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Joe-Waschl hat geschrieben:habs geändert ;)

Code: Alles auswählen

def namen(db):
    eingabe = [raw_input('Namen: ')]
    cur = db.cursor()
    cur.execute("""SELECT Anschrift_ID, Name, Nachname, Straße, PLZ, Ort, Telefon, Handy, email, 
    DATE_FORMAT(Geburtstag, '%%d.%%m.%%Y') AS Geburtstag FROM Anschrift where Name = %s""", (eingabe,))
    for row in cur.fetchall():
        print '---------------------'
        print 'Nr.:       ', row[0]
        print 'Name:      ', row[1]
        print 'Nachname:  ', row[2]
        print 'Straße:    ', row[3]
        print 'PLZ:       ', row[4]
        print 'Ort:       ', row[5]
        print 'Telefonnr.:', row[6]
        print 'Handy:     ', row[7]
        print 'Email:     ', row[8]
        print 'Geburtstag:', row[9]
        print '----------------------'
funktioniert die Abfrage so? Ich würde meinen, dass da hinter 'eingabe' noch das Komma fehlt, so wie ich es bereits geändert habe. Sonst übergibt man dem Platzhalter %s ein e dann ein i, n, g, a, b, e und nicht den Wert der in 'eingabe' gespeichert ist.

lg
BlackJack

@bfm: Da gehört weder das Komma noch die Klammern hin, weil Eingabe bereits eine Liste ist.
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Code: Alles auswählen

    eingabe = [raw_input('Namen: ')]
@BlackJack: sehe ich das richtig so, dass die beiden eckigen Klammern "eingabe" als Liste und nicht als "normale Variable" erzeugen? ok, dann ist es nachvollziebar, dass das Komma und die Klammern im execute zu viel sind.
BlackJack

@bfm: Ja genau. Eckige Klammern mit Ausdrücken die Werte ergeben und durch Kommas getrennt sind, erzeugen eine Liste. Wobei man natürlich auch nur einen einzigen Wert hinschreiben kann. Ich hätte die Klammern an der Stelle ja nicht gesetzt, sondern beim Aufruf, aber so wie Joe-Waschl kann man es natürlich auch machen.
Antworten