[gelöst] sqlite WHERE Frage

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

[gelöst] sqlite WHERE Frage

Beitragvon ete » Donnerstag 7. August 2008, 11:01

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: sqlite WHERE Frage

Beitragvon gerold » Donnerstag 7. August 2008, 11:06

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:

Beitragvon ete » Donnerstag 7. August 2008, 11:21

Danke :D

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

Edit:

Bekomme ein " near '%' Synthax Error " :?:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 7. August 2008, 11:46

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:

Beitragvon ete » Donnerstag 7. August 2008, 11:49

Danke :D
BlackJack

Beitragvon BlackJack » Donnerstag 7. August 2008, 12:58

@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:

Beitragvon ete » Freitag 8. August 2008, 11:11

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...

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder