auf dem Raspberry Pi eine MySQL kommunikation
lima-city → Forum → Programmiersprachen → Python
abfrage
all
barcode
befehl
code
cursor
erzeugt folgende fehlermeldung
file
folgende funktion
funktion
menge
modul
nutz
platzhalter
punkt
set
update
url
warenlager
zweiten datei
-
Hey Leute,
ich habe zur Zeit ein Script auf dem Raspberry Pi laufen und möchte dort nun Funktionen ergänzen, die zum Programm gehören. Nur leider komme ich da nicht vorran.
MySQL Habe ich an sich schon benutzt aber noch nicht im Zusammenhang mit Python.
Es geht um folgende Funktion:
def einlagern(scan): abfrage = cursor.execute("SELECT * FROM warenlager WHERE barcode = '%s'" % scan) if abfrage == 0: print "Barcode unbekannt" print "" rows = cursor.fetchall() for row in rows: inmenge = input("Bitte Menge eingeben: ") neuemenge = (int(row[2]) + int(inmenge)) cursor.execute("UPDATE warenlager SET menge=? WHERE barcode=?",(neuemenge, scan)) return
Dieser Code soll als erstes über die Abfrage sicherstellen, dass das Produkt überhaupt vorhanden ist. Wenn dieses vorhanden ist, soll er die Menge über den UPDATE Befehl abändern. Die Abfragefunktion klappt, ich habe dies bereits vorher getestet und nutze diese in einer anderen Funktion schon.
Der Codeteil erzeugt folgende Fehlermeldung:
Traceback (most recent call last): File "mysql.py", line 60, in <module> einlagern(scan) File "mysql.py", line 33, in einlagern cursor.execute("UPDATE warenlager SET menge=? WHERE barcode=?",(neuemenge, scan)) File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute query = query % db.literal(args) TypeError: not all arguments converted during string formatting
Kann mir jemand verraten wodran dies liegt? Wenn zusätzliche Informationen benötigt werden, bitte fragen.
Michael
PS: Wenn wir gerade schon dabei sind, kann man mir vielleicht noch ein Tipp geben, wie man folgende MySQL Befehle in Python nutzt:
INSERT
DELET
COUNT (Habe ich zwar an sich indirekt genutzt, aber nur ob ein Datensatz vorhanden ist, ggf. benötigt man noch mal die COUNT Funktion.)
Dadrüber hinaus, gibt es die Möglichkeit, die Connectdaten aus zu lagern? Also ähnlich wie bei PHP per include - Befehl, dass man die so einbinden kann aus einer zweiten Datei? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1) Nimm als Platzhalter je ein
anstatt eines%s
.?
2) Nimm auch bei der Abfrage einen Platzhalter im WHERE-Teil, sonst bist du für SQL-Injection anfällig.
3) Wenn du eine Änderung mit UPDATE, INSERT o.ä. durchführst, musst du anschließend ein
durchführen (unter der Annahme, dassdb.commit()
dein MySQLdb-Objekt ist). Ansonsten werden deine Änderungen zurückgerollt und niemals in der Datenbank festgeschrieben.db
4) Konfigurierbarkeit: sieh dir dazu das ConfigParser-Modul an.
5) Auslagern von Code: dazu gibt es
usw. Du kannst also z.b. deinen MySQL-Code in ein eigenes Modul auslagern und es importieren, wenn du es benötigst.import
6) Warum Python 2.7 und nicht Python 3? -
Werde das mal in Angriff nehmen, soweit ich es hin bekomme.
Werde mal den ganzen Code morgen hier mal Posten, denke damit kann man mehr anfangen.
Zu Punkt 5 kannst mir da vielleicht ein wenig helfen, wie man sowas gestalten kann?
Und zu Punkt 6, naja ich dachte an sich spricht da nichts gegen und den "Basiscode" hab ich so gehabt und da ich nur Hobbyprogger bin mit wenig Erfahrung bin hab ich es mir nich zugetraut auf moderner zu machen. Also Version 3.
Vorallem ist die Sache, viele "Bestandteile" für den Raspberry Pi, vorallem was Hardwareansteuerung angeht basiert noch auf Version 2.7 zumindest aus den Büchern und daher denke ich, ist nich verkehrt bei einem System zu bleiben.
Michael -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage