[gelöst] sqlite WHERE Frage

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Hallo!

Ich möchte die Daten aus einer DB ausgeben, wenn nr gleich der artikel_nummer entspricht, wobei nr ein Variable aus einer Funktion ist:

Code: Alles auswählen

def put_artikel(self, evt):
        FILENAME = "artikel.sdb3"
        nr = self.get_ean(evt)
        nr = int(nr)
        conn = sqlite3.connect(FILENAME) 
        adr_cursor = db.select_scan_article(conn)
        print list(adr_cursor)
        conn.close()
Die DB Funktion sieht so aus:

Code: Alles auswählen

def select_scan_article(conn): 
    sql = """ 
    SELECT id, artikel_nummer, ean, name, gruppe, ek, vk, mwst, bestand
    FROM artikel 
    WHERE artikel_nummer = nr
    ORDER by id, name 
    """ 
    cur = conn.cursor() 
    cur.execute(sql) 
    return cur 
Muss ich da einen bestimmten Syntax gebrauchen? Wenn ich WHERE artikel_nummer = '1', teste und nr dann '1' ist, dann funktioniert alles. Übergebe ich der DB Funktion im Kopf die Variable nr, gibts ne Fehlermeldung das nr keine Spalte ist (wieso nr ist doch der Vergleich?)
Zuletzt geändert von ete am Donnerstag 7. August 2008, 11:57, insgesamt 1-mal geändert.
http://www.snowflake-sl.info/index.html
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo ete!

Code: Alles auswählen

def put_artikel(self, evt):
        FILENAME = "artikel.sdb3"
        nr = self.get_ean(evt)
        nr = int(nr)
        conn = sqlite3.connect(FILENAME) 
        adr_cursor = db.select_scan_article(conn, nr)
        print list(adr_cursor)
        conn.close()
Die DB Funktion sieht so aus:

Code: Alles auswählen

def select_scan_article(conn, nr): 
    sql = """ 
    SELECT id, artikel_nummer, ean, name, gruppe, ek, vk, mwst, bestand
    FROM artikel 
    WHERE artikel_nummer = %s
    ORDER by id, name 
    """ 
    cur = conn.cursor() 
    # wenn Textfeld, dann eventuell: ``nr = str(nr)``
    cur.execute(sql, (nr, )) 
    return cur 
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Danke :D

Nur wissenshalber, warum ist
artikel_nummer = nr ein Problem? Ich erwähne es doch im Funktionskopf?

Edit:

Bekomme ein " near '%' Synthax Error " :?:
http://www.snowflake-sl.info/index.html
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

ete hat geschrieben:Bekomme ein " near '%' Synthax Error " :?:
Sch....! Immer diese unterschiedlichen Ersetzzeichen. :x

Nimm statt ``%s`` ``?``.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Danke :D
http://www.snowflake-sl.info/index.html
BlackJack

@ete: Würdest Du hier erwarten, dass die 42 ausgegeben wird?

Code: Alles auswählen

In [4]: nr = 42

In [5]: print 'Die Nummmer lautet: nr'
Die Nummmer lautet: nr
Falls nicht, warum denkst Du, dass das bei Deinem Beispiel plötzlich funktionieren sollte? Zumal die SQL-Anweisung irgendwo von einer Datenbanksoftware in einem anderen Prozess verarbeitet wird, die sicher nicht weiss, was im Python-Programm(-Prozess) so an Namen existiert und an welche Werte die gebunden sind.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

BlackJack hat geschrieben:@ete: Würdest Du hier erwarten, dass die 42 ausgegeben wird?

Code: Alles auswählen

In [4]: nr = 42

In [5]: print 'Die Nummmer lautet: nr'
Die Nummmer lautet: nr
Falls nicht, warum denkst Du, dass das bei Deinem Beispiel plötzlich funktionieren sollte? Zumal die SQL-Anweisung irgendwo von einer Datenbanksoftware in einem anderen Prozess verarbeitet wird, die sicher nicht weiss, was im Python-Programm(-Prozess) so an Namen existiert und an welche Werte die gebunden sind.
Stimmt :wink: Wurde vom sql Syntax abgelenkt...
http://www.snowflake-sl.info/index.html
Antworten