Seite 1 von 2

Re: Datum & SQL

Verfasst: Freitag 26. Juli 2013, 12:58
von Joe-Waschl
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

Re: Datum & SQL

Verfasst: Freitag 26. Juli 2013, 13:20
von 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.

Re: Datum & SQL

Verfasst: Freitag 26. Juli 2013, 13:36
von Joe-Waschl
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 '----------------------'

Re: Datum & SQL

Verfasst: Dienstag 30. Juli 2013, 15:45
von bfm
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

Re: Datum & SQL

Verfasst: Dienstag 30. Juli 2013, 15:52
von BlackJack
@bfm: Da gehört weder das Komma noch die Klammern hin, weil Eingabe bereits eine Liste ist.

Re: Datum & SQL

Verfasst: Mittwoch 31. Juli 2013, 10:19
von bfm

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.

Re: Datum & SQL

Verfasst: Mittwoch 31. Juli 2013, 12:18
von 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.