Update Syntax für eine Tabelle mit Variablen als Value

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Guten Morgen,

wie man in der Betreffzeile erkennen kann geht es um diesen Syntax.
(Zeile 318-327)
Ich hänge schon eine weile an dieser Sache und komm einfach nicht weiter.

Vielleicht hat einer von euch ein Idee oder kann mir an einem Beispiel zeigen was ich falsch mache.
Des Weiteren ist mein Code nicht der beste, später werde ich das ganze in OO umsetzen.

Code: Alles auswählen

import tkinter
import tkinter.ttk
import tkinter.messagebox
import psycopg2
from tkinter import *
from tkinter.ttk import *



root = Tk()
root.title('WBS') # title for top-level window
master = Frame(root, name='master') # create Frame in "root"
master.pack(fill=BOTH) # fill both sides of the parent
# quit if the window is deleted
root.protocol("WM_DELETE_WINDOW", master.quit)
nb = Notebook(master, name='nb', width=1200, height=450) # create Notebook in "master"
nb.grid(row=6, column=2) # fill "master" but pad sides


slave = Frame(root, name='slave') # create Frame in "root"
slave.pack(fill=BOTH) # fill both sides of the parent
nbs = Notebook(slave, name='nbs', width=1200, height=400) # create Notebook in "master"
nbs.grid(row=6, column=2) # fill "master" but pad sides

#Tab Master hinzufügen
tab_kunde_neu = Frame(nb, name='tab-kunde-neu')
nb.add(tab_kunde_neu, text="Kunde (neu)")
tab_kunde = Frame(master, name='tab-kunde')
nb.add(tab_kunde, text="Kunde")
tab_vermittler_neu = Frame(nb, name='tab-vermittler-neu')
nb.add(tab_vermittler_neu, text="Vermittler (neu)")
tab_vermittler = Frame(nb, name='tab-vermittler')
nb.add(tab_vermittler, text="Vermittler")


#Tab Slave hinzufügen
tab_uebersicht = Frame(nbs, name="tab-uebersicht")
nbs.add(tab_uebersicht, text="Vertragsübersicht")
tab_vertrag = Frame(nbs, name="tab-vertrag")
nbs.add(tab_vertrag, text="Vertrag (neu)")


def abbruch():
    titel.delete(0, END)
    name.delete(0, END)
    vorname.delete(0, END)
    anrede.delete(0, END)
    geburtstag.delete(0, END)
    staat.delete(0, END)
    steuer.delete(0, END)
    finanzamt.delete(0, END)
    strasse.delete(0, END)
    hausnr.delete(0, END)
    plz.delete(0, END)
    ort.delete(0, END)
    telefon.delete(0, END)
    telefax.delete(0, END)
def save():
    connection = psycopg2.connect("dbname=sqltest")
    connection.commit()
    cursor = connection.cursor()


    #Tabelle erzeugen
    sql = "CREATE TABLE IF NOT EXISTS vertrag(" \
          "vertragsnummer   TEXT, " \
          "letzte_aenderung TEXT, " \
          "datum            TEXT, " \
          "ort              TEXT, " \
          "pruefer          TEXT, " \
          "vertragsart      TEXT, " \
          "betrag           TEXT, " \
          "gebuehr          TEXT, " \
          "produktname      TEXT, " \
          "zinssatz         TEXT, " \
          "konto            TEXT, " \
          "start            TEXT, " \
          "laufzeit         TEXT, " \
          "kuendigung       TEXT, " \
          "bearbeiter       TEXT, " \
          "vermittler       TEXT)"
    cursor.execute(sql)
    connection.commit()

    sql = "INSERT INTO vertrag VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s', '%s', '%s')" % \
          (ausvertrag.get(), auschange.get(), datum.get(),
          orts.get(), pruefer.get(), vertragsart.get(),
          betrag.get(), gebuehr.get(), produktname.get(),
          zinssatz.get(), konto.get(), start.get(),
          laufzeit.get(), kuendigung.get(), bearbeiter.get(),
          vermittler.get())

    if ausvertrag.get()     =="" or \
        auschange.get()     =="" or \
        datum.get()         =="" or \
        orts.get()          =="" or \
        pruefer.get()       =="" or \
        vertragsart.get()   =="" or \
        betrag.get()        =="" or \
        gebuehr.get()       =="" or \
        produktname.get()   =="" or \
        zinssatz.get()      =="" or \
        konto.get()         =="" or \
        start.get()         =="" or \
        laufzeit.get()      =="" or \
        kuendigung.get()    =="" or \
        bearbeiter.get()    =="" or \
        vermittler.get()    =="":
        return tkinter.messagebox.showwarning('ERROR', 'Daten wurden nicht Vollständig angegeben')

    else:
        cursor.execute(sql)
        connection.commit()
        connection.close()

    #Inhalt der Eingabefelder nach dem senden leeren
    ausvertrag.delete(0, END)
    auschange.delete(0, END)
    datum.delete(0, END)
    orts.delete(0, END)
    pruefer.delete(0, END)
    vertragsart.delete(0, END)
    betrag.delete(0, END)
    gebuehr.delete(0, END)
    produktname.delete(0, END)
    zinssatz.delete(0, END)
    konto.delete(0, END)
    start.delete(0, END)
    laufzeit.delete(0, END)
    kuendigung.delete(0, END)
    bearbeiter.delete(0, END)
    vermittler.delete(0, END)

def senden():
    connection = psycopg2.connect("dbname=sqltest")
    connection.commit()
    cursor = connection.cursor()


    #Tabelle erzeugen
    sql = "CREATE TABLE IF NOT EXISTS personen(" \
          "titel       TEXT, " \
          "name        TEXT, " \
          "vorname     TEXT, " \
          "anrede      TEXT, " \
          "geburtstag  TEXT, " \
          "staat       TEXT, " \
          "steuerident TEXT, " \
          "finanzamt   TEXT, " \
          "strasse     TEXT, " \
          "hausnummer  TEXT, " \
          "ort         TEXT, " \
          "plz         TEXT, " \
          "telefon     TEXT, " \
          "telefax     TEXT)"
    cursor.execute(sql)
    connection.commit()

    sql = "INSERT INTO personen VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % \
          (titel.get(), name.get(), vorname.get(),
          anrede.get(), geburtstag.get(), staat.get(),
          steuer.get(), finanzamt.get(), strasse.get(),
          hausnr.get(), plz.get(), ort.get(),
          telefon.get(), telefax.get())

    if  titel.get()      =="" or \
        name.get()       =="" or \
        vorname.get()    =="" or \
        anrede.get()     =="" or \
        geburtstag.get() =="" or \
        staat.get()      =="" or \
        steuer.get()     =="" or \
        finanzamt.get()  =="" or \
        strasse.get()    =="" or \
        hausnr.get()     =="" or \
        plz.get()        =="" or \
        ort.get()        =="" or \
        telefon.get()    =="" or \
        telefax.get()    =="":
        return tkinter.messagebox.showwarning('ERROR', 'Daten wurden nicht Vollständig angegeben')

    else:
        cursor.execute(sql)
        connection.commit()
        connection.close()


    #Inhalt der Eingabefelder nach dem senden leeren
    titel.delete(0, END)
    name.delete(0, END)
    vorname.delete(0, END)
    anrede.delete(0, END)
    geburtstag.delete(0, END)
    staat.delete(0, END)
    steuer.delete(0, END)
    finanzamt.delete(0, END)
    strasse.delete(0, END)
    hausnr.delete(0, END)
    plz.delete(0, END)
    ort.delete(0, END)
    telefon.delete(0, END)
    telefax.delete(0, END)




#Beschriftung
Label(tab_kunde_neu, text="Titel", font="Helvetica 13 bold").grid(row=1, column=0)
Label(tab_kunde_neu, text="Name", font="Helvetica 13 bold").grid(row=1, column=2)
Label(tab_kunde_neu, text="Vorname", font="Helvetica 13 bold").grid(row=1, column=4)
Label(tab_kunde_neu, text="Anrede", font="Helvetica 13 bold").grid(row=3, column=0)
Label(tab_kunde_neu, text="Geburtstag", font="Helvetica 13 bold").grid(row=3, column=2)
Label(tab_kunde_neu, text="Staatsangehörigkeit", font="Helvetica 13 bold").grid(row=3, column=4)
Label(tab_kunde_neu, text="Steueridentifikationsnummer", font="Helvetica 13 bold").grid(row=5, column=0)
Label(tab_kunde_neu, text="Finanzamt", font="Helvetica 13 bold").grid(row=5, column=2)
Label(tab_kunde_neu, text="Strasse", font="Helvetica 13 bold").grid(row=7, column=0)
Label(tab_kunde_neu, text="Hausnummer", font="Helvetica 13 bold").grid(row=7, column=2)
Label(tab_kunde_neu, text="Postleitzahl", font="Helvetica 13 bold").grid(row=9, column=0)
Label(tab_kunde_neu, text="Ort", font="Helvetica 13 bold").grid(row=9, column=2)
Label(tab_kunde_neu, text="Telefon", font="Helvetica 13 bold").grid(row=11, column=0)
Label(tab_kunde_neu, text="Telefax", font="Helvetica 13 bold").grid(row=11, column=2)


#Eingabefelder
titel = Entry(tab_kunde_neu, font=10)
titel.grid(row=0, column=0)
name = Entry(tab_kunde_neu, font=10)
name.grid(row=0, column=2)
vorname = Entry(tab_kunde_neu, font=10)
vorname.grid(row=0, column=4)
anrede = Entry(tab_kunde_neu, font=10)
anrede.grid(row=2, column=0)
geburtstag = Entry(tab_kunde_neu, font=10)
geburtstag.grid(row=2, column=2)
staat = Entry(tab_kunde_neu, font=10)
staat.grid(row=2, column=4)
steuer = Entry(tab_kunde_neu, font=10)
steuer.grid(row=4, column=0)
finanzamt = Entry(tab_kunde_neu, font=10)
finanzamt.grid(row=4, column=2)
strasse = Entry(tab_kunde_neu, font=10)
strasse.grid(row=6, column=0)
hausnr = Entry(tab_kunde_neu, font=10)
hausnr.grid(row=6, column=2)
plz = Entry(tab_kunde_neu, font=10)
plz.grid(row=8, column=0)
ort = Entry(tab_kunde_neu, font=10)
ort.grid(row=8, column=2)
telefon = Entry(tab_kunde_neu, font=10)
telefon.grid(row=10, column=0)
telefax = Entry(tab_kunde_neu, font=10)
telefax.grid(row=10, column=2)

Button(tab_kunde_neu, text='Schließen', command=master.quit).grid(row=5, column=5, sticky=NSEW, pady=4)
Button(tab_kunde_neu, text='Speichern', command=senden).grid(row=6, column=5, sticky=NSEW, pady=4)
Button(tab_kunde_neu, text='Abbruch', command=abbruch).grid(row=7, column=5, sticky=NSEW, pady=4)


#----------------------------------------------------------------------------------------------------------------------#

Label(tab_kunde, text="Steueridentnr suchen", font="Helvetica 13 bold").grid(row=0, column=0)
suche = Entry(tab_kunde, font=10)
suche.grid(row=0, column=1)

def suchen():

    connection = psycopg2.connect("dbname=sqltest")
    cursor = connection.cursor()
    cursor.execute('SELECT * FROM personen WHERE steuerident = %s ', suche.get())

    ausgabetitel.delete (0, END)
    ausgabename.delete (0, END)
    ausgabevorname.delete (0, END)
    ausgabeanrede.delete (0, END)
    ausgabegeburtstag.delete (0, END)
    ausgabestaat.delete (0, END)
    ausgabesteuer.delete (0, END)
    ausgabefinanzamt.delete (0, END)
    ausgabestrasse.delete (0, END)
    ausgabehausnr.delete (0, END)
    ausgabeort.delete (0, END)
    ausgabeplz.delete (0, END)
    ausgabetelefon.delete (0, END)
    ausgabetelefax.delete (0, END)

    for dsatz in (cursor):
        titel    =   dsatz[0]
        name   =     dsatz[1]
        vorname =    dsatz[2]
        anrede =     dsatz[3]
        geburtstag = dsatz[4]
        staat =      dsatz[5]
        steuer =     dsatz[6]
        finanzamt =  dsatz[7]
        strasse =    dsatz[8]
        hausnr =     dsatz[9]
        ort =        dsatz[10]
        plz =        dsatz[11]
        telefon =    dsatz[12]
        telefax =    dsatz[13]

        ausgabetitel.insert             ("end", titel)
        ausgabename.insert              ("end", name)
        ausgabevorname.insert           ("end", vorname)
        ausgabeanrede.insert            ("end", anrede)
        ausgabegeburtstag.insert        ("end", geburtstag)
        ausgabestaat.insert             ("end", staat)
        ausgabesteuer.insert            ("end", steuer)
        ausgabefinanzamt.insert         ("end", finanzamt)
        ausgabestrasse.insert           ("end", strasse)
        ausgabehausnr.insert            ("end", hausnr)
        ausgabeort.insert               ("end", ort)
        ausgabeplz.insert               ("end", plz)
        ausgabetelefon.insert           ("end", telefon)
        ausgabetelefax.insert           ("end", telefax)


def update():
    connection = psycopg2.connect("dbname=sqltest")
    connection.commit()
    cursor = connection.cursor()

    sql=("UPDATE personen SET titel =",titel.get(), " WHERE steuerident=",suche)
    cursor.execute(sql)

    connection.commit()
    connection.close()




Button(tab_kunde, text='Suchen', command=suchen).grid(row=0, column=2, sticky=W, pady=20)
Button(tab_kunde, text='Ändern', command=update).grid(row=8, column=2, sticky=W)



#Beschriftung
Label(tab_kunde, text="Titel", font="Helvetica 13 bold").grid(row=4, column=0, pady=5, padx=5)
Label(tab_kunde, text="Name", font="Helvetica 13 bold").grid(row=4, column=1, pady=5, padx=5)
Label(tab_kunde, text="Vorname", font="Helvetica 13 bold").grid(row=4, column=2, pady=5, padx=5)
Label(tab_kunde, text="Anrede", font="Helvetica 13 bold").grid(row=6, column=0, pady=5, padx=5)
Label(tab_kunde, text="Geburtstag", font="Helvetica 13 bold").grid(row=6, column=1, pady=5, padx=5)
Label(tab_kunde, text="Staatsangehörigkeit", font="Helvetica 13 bold").grid(row=6, column=2, pady=5, padx=5)
Label(tab_kunde, text="Steueridentifikationsnr", font="Helvetica 13 bold").grid(row=8, column=0, pady=5, padx=5)
Label(tab_kunde, text="Finanzamt", font="Helvetica 13 bold").grid(row=8, column=1, pady=5, padx=5)
Label(tab_kunde, text="Strasse", font="Helvetica 13 bold").grid(row=10, column=0, pady=5, padx=5)
Label(tab_kunde, text="Hausnummer", font="Helvetica 13 bold").grid(row=10, column=1, pady=5, padx=5)
Label(tab_kunde, text="Postleitzahl", font="Helvetica 13 bold").grid(row=12, column=0, pady=5, padx=5)
Label(tab_kunde, text="Ort", font="Helvetica 13 bold").grid(row=12, column=1, pady=5, padx=5)
Label(tab_kunde, text="Telefon", font="Helvetica 13 bold").grid(row=14, column=0, pady=5, padx=5)
Label(tab_kunde, text="Telefax", font="Helvetica 13 bold").grid(row=14, column=1, pady=5, padx=5)

#Eingabefelder
ausgabetitel = Entry(tab_kunde, font=10)
ausgabetitel.grid(row=3, column=0, padx=5)
ausgabename = Entry(tab_kunde, font=10)
ausgabename.grid(row=3, column=1, padx=5)
ausgabevorname = Entry(tab_kunde, font=10)
ausgabevorname.grid(row=3, column=2, padx=5)
ausgabeanrede = Entry(tab_kunde, font=10)
ausgabeanrede.grid(row=5, column=0, padx=5)
ausgabegeburtstag = Entry(tab_kunde, font=10)
ausgabegeburtstag.grid(row=5, column=1, padx=5)
ausgabestaat = Entry(tab_kunde, font=10)
ausgabestaat.grid(row=5, column=2, padx=5)
ausgabesteuer = Entry(tab_kunde, font=10)
ausgabesteuer.grid(row=7, column=0, padx=5)
ausgabefinanzamt = Entry(tab_kunde, font=10)
ausgabefinanzamt.grid(row=7, column=1, padx=5)
ausgabestrasse = Entry(tab_kunde, font=10)
ausgabestrasse.grid(row=9, column=0, padx=5)
ausgabehausnr = Entry(tab_kunde, font=10)
ausgabehausnr.grid(row=9, column=1, padx=5)
ausgabeplz = Entry(tab_kunde, font=10)
ausgabeplz.grid(row=11, column=0, padx=5)
ausgabeort = Entry(tab_kunde, font=10)
ausgabeort.grid(row=11, column=1, padx=5)
ausgabetelefon = Entry(tab_kunde, font=10)
ausgabetelefon.grid(row=13, column=0, padx=5)
ausgabetelefax = Entry(tab_kunde, font=10)
ausgabetelefax.grid(row=13, column=1, padx=5)



#----------------------------------------------------------------------------------------------------------------------#
#Beschriftung
Label(tab_vertrag, text="Vertragsnummer", font="Helvetica 13 bold").grid(row=4, column=0, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="letzte Änderung", font="Helvetica 13 bold").grid(row=4, column=1, pady=5, padx=5, sticky=W)

Label(tab_vertrag, text="Datum", font="Helvetica 13 bold").grid(row=6, column=0, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Ort", font="Helvetica 13 bold").grid(row=6, column=1, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Prüfer", font="Helvetica 13 bold").grid(row=6, column=2, pady=5, padx=5, sticky=W)

Label(tab_vertrag, text="Vertragsart", font="Helvetica 13 bold").grid(row=8, column=0, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Betrag", font="Helvetica 13 bold").grid(row=8, column=1, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Gebühr", font="Helvetica 13 bold").grid(row=8, column=2, pady=5, padx=5, sticky=W)

Label(tab_vertrag, text="Produktname", font="Helvetica 13 bold").grid(row=10, column=0, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Zinssatz", font="Helvetica 13 bold").grid(row=10, column=1, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="konto", font="Helvetica 13 bold").grid(row=10, column=2, pady=5, padx=5, sticky=W)

Label(tab_vertrag, text="Start", font="Helvetica 13 bold").grid(row=12, column=0, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Laufzeit", font="Helvetica 13 bold").grid(row=12, column=1, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Kündigung", font="Helvetica 13 bold").grid(row=12, column=2, pady=5, padx=5, sticky=W)

Label(tab_vertrag, text="Bearbeiter", font="Helvetica 13 bold").grid(row=14, column=0, pady=5, padx=5, sticky=W)
Label(tab_vertrag, text="Vermittler", font="Helvetica 13 bold").grid(row=14, column=1, pady=5, padx=5, sticky=W)

#Felder

ausvertrag = Entry(tab_vertrag, font=10)
ausvertrag.grid(row=3, column=0, padx=5)
auschange = Entry(tab_vertrag, font=10)
auschange.grid(row=3, column=1, padx=5)

datum = Entry(tab_vertrag, font=10)
datum.grid(row=5, column=0, padx=5)
orts = Entry(tab_vertrag, font=10)
orts.grid(row=5, column=1, padx=5)
pruefer = Entry(tab_vertrag, font=10)
pruefer.grid(row=5, column=2, padx=5)

vertragsart = Entry(tab_vertrag, font=10)
vertragsart.grid(row=7, column=0, padx=5)
betrag = Entry(tab_vertrag, font=10)
betrag.grid(row=7, column=1, padx=5)
gebuehr = Entry(tab_vertrag, font=10)
gebuehr.grid(row=7, column=2, padx=5)

produktname = Entry(tab_vertrag, font=10)
produktname.grid(row=9, column=0, padx=5)
zinssatz = Entry(tab_vertrag, font=10)
zinssatz.grid(row=9, column=1, padx=5)
konto = Entry(tab_vertrag, font=10)
konto.grid(row=9, column=2, padx=5)

start = Entry(tab_vertrag, font=10)
start.grid(row=11, column=0, padx=5)
laufzeit = Entry(tab_vertrag, font=10)
laufzeit.grid(row=11, column=1, padx=5)
kuendigung = Entry(tab_vertrag, font=10)
kuendigung.grid(row=11, column=2, padx=5)

bearbeiter = Entry(tab_vertrag, font=10)
bearbeiter.grid(row=13, column=0, padx=5)
vermittler = Entry(tab_vertrag, font=10)
vermittler.grid(row=13, column=1, padx=5)

Button(tab_vertrag, text='Speichern', command=save).grid(row=14, columnspan=3, sticky=E)


#----------------------------------------------------------------------------------------------------------------------#

#Vertragsübersicht Tabelle
top = ["Vertragsnummer","Vertragsart","Betrag","Kündigung"]


for i in range(5):
    for j in range(4):
        l = Label(tab_uebersicht, text='%d.%d' % (i, j), relief=RIDGE)
        l.grid(row=i, column=j, sticky=NSEW, padx=5, pady=5)



if __name__ == "__main__":
    master.mainloop() # call master's Frame.mainloop() method.
    root.destroy() # if mainloop quits, destroy window
der Traceback sagt folgendes:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib64/python3.2/tkinter/__init__.py", line 1399, in __call__
    return self.func(*args)
  File "Pfad", line 324, in update
    cursor.execute(sql)
TypeError: argument 1 must be a string or unicode object
Ich kann selbst damit nichts anfangen. ich hoffe ihr könnt mir mehr sagen :wink:

Grüße
Kalli

Ps. Es handelt sich um psycopg2
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: woher hast Du denn diese Syntax für SQL-Befehle bei execute?
Dafür nimmt man SQL mit Platzhaltern. Wie man es noch falsch machen kann, hast Du auch schon in Zeile 159 gezeigt.
Wie man es dagegen richtig macht, ist in Zeile 269 zu sehen.

Willst Du nicht die 16(!) Textfelder in eine Liste stecken, dann wäre enorm viel weniger Copy-Paste nötig.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@Sirius3
Danke für deine schnelle Antwort und danke für deinen Hinweis :wink:
aber das is ja nicht mein Problem was ich habe.

Mein Problem is die Update-Funktion, ich kann die Daten auslesen
und anzeigen lassen, möchte aber, wenn ich Sie mir ausgegeben habe,
ändern und hier im Code ist es Beispielhaft nur für eine Sache definiert
und zwar für den "Titel".

Weil dieser Syntax funktioniert leider nicht so wie ichs gerne hätte
und ich bin langsam mit meinen Ideen am ende.

Code: Alles auswählen

sql=("UPDATE personen SET titel =",titel.get(), " WHERE steuerident=",suche)

Ps.: Du hast schon recht was Copy-Paste betrifft. Das der Code schlecht ist, ist mir auch bewusst.
Es soll erstmal funktionieren und wenn alles nach Plan läuft und Funktioniert wird alles angepasst.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Kalli87 hat geschrieben:

Code: Alles auswählen

sql=("UPDATE personen SET titel =",titel.get(), " WHERE steuerident=",suche)
Du definierst hier ein Tupel mit vier Werten. Da du offensichtlich versuchst Syntax zu raten wäre wohl erst einmal ein Grundlagentutorial angebracht.
Kalli87 hat geschrieben:Es soll erstmal funktionieren und wenn alles nach Plan läuft und Funktioniert wird alles angepasst.
Wenn alles läuft, dann gibt es keine Notwendigkeit mehr, es anzupassen und auch du wirst das nicht machen. Wenn dann nach einigen Monaten ein Problem auftritt stehst du allerdings genau vor diesem Code-Verhau und weißt nicht mehr wo hinten und vorne ist.

Man programmiert so, dass es von Anfang an handlich und übersichtlich ist. Man verwendet sinnvolle Bezeichnernamen und teilt ein Programm in handliche und einzeln testbare Funktionen auf.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Da der Syntax mit Variablen mir leider nicht in dieser Art und Weise bekannt ist wie ich es in diesem Fall brauche
ist es klar das ich probiere oder rate.

Ich finde in keinem Handbuch oder im Internet etwas was vergleichbar wäre um mir zu helfen.
Deswegen hab ich ja hier im Forum dieses Thema erstellt damit mir auf die Sprünge geholfen werden kann.

Ich verlange ja keine Lösung des ganzen Problems, lediglich ein Beispiel was ähnlich aufgebaut ist und indem
auch Variablen genutzt werden wie bei mir.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: ob der SQL-Befehl jetzt ein UPDATE oder SELECT ist, ist doch wurscht. Wie man Parameter übergeben muß, ist doch immer gleich.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Kalli87 hat geschrieben:Da der Syntax mit Variablen mir leider nicht in dieser Art und Weise bekannt ist wie ich es in diesem Fall brauche
ist es klar das ich probiere oder rate.
Ein Konstrukt in der Form value = (x, y, z) gibt immer ein Tupel, egal wie die Variablen heißen. Aber gut, was probiert man nicht alles in der Not ...
Kalli87 hat geschrieben:Ich finde in keinem Handbuch oder im Internet etwas was vergleichbar wäre um mir zu helfen.
Dann schau dir mal Passing parameters to SQL queries in der Psycopg-Dokumentation an.

Beherzige insbesondere die dort angegebene Warnung: "Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint."
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Danke Sirius3 und /me

Der Syntax ist klar, wenn ich mal die Variablen ersetze durch normalen text funzt es ohne Probleme

Code: Alles auswählen

cursor.execute("UPDATE personen SET titel = 'blablabla' WHERE steuerident = '1' ")
Wenn ich jetzt aber statt "blablabla" die Variable titel.get() verwenden möchte und bei "steuerident = '1'" die Variable suche.get() geht es nicht
Über "Print" werden mir aber die einzelnen werte ausgegeben aber es wird nicht geändert in der Datenbank was mich langsam an den Rand der Verzweiflung bringt.

Wahrscheinlich ist es wieder so ein simpler Fehler den ich nicht sehe.......
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: woran scheiterst Du die Zeile

Code: Alles auswählen

cursor.execute('SELECT * FROM personen WHERE steuerident = %s ', suche.get())
an Deinen UpDate-Befehl anzupassen?
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@Sirius3

Der WHERE Zweig ist gleich das ist richtig und daran scheitert es ja nicht.

Wo ich scheitere liegt in der ersten Hälfte des Befehls also hier:

Code: Alles auswählen

"UPDATE personen SET titel = ' ",titel.get()," '
Ich hab das Gefühl das die Kommas nicht stimmen, die Hochkommas und die Anführungszeichen sind meiner
Meinung nach definitiv richtig und bei "UPDATE personen SET titel" auch aber anscheinend fehlt irgendwas.....
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: da wir uns scheinbar gegenseitig nicht verstehen:

Code: Alles auswählen

cursor.execute("UPDATE personen SET titel=%s WHERE steuerident=%s", (title.get(), suche.get()))
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Boar echt jetzt? :oops:

Auf diese Variante bin ich echt nicht gekommen, hab es ständig anders probiert
und versucht und nix ging so richtig.....

Danke für die Hilfe!
Antworten