Hilfe bei Datensätze aktualliesieren in eine MySQL DB

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

@DGUV-V3: wie Du aus der Dokumentation entnehmen kannst ist der Platzhalter für MySQLDB %s.
DGUV-V3
User
Beiträge: 24
Registriert: Dienstag 12. April 2016, 09:50

Sirius3 hat geschrieben:@DGUV-V3: wie Du aus der Dokumentation entnehmen kannst ist der Platzhalter für MySQLDB %s.
@Sirius könntest du mir dafür mal ein Beispiel zeigen und oder den Link zur Dokumentation geben, da ich das nun versucht habe einzubauen und immer noch den selben Fehler bekomme
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

@DGUV-V3: jetzt müßte ich wieder wissen, was Du genau gemacht hast und wie der Fehler incl. Traceback genau aussieht. Diesmal vielleicht der passende Code zum Fehler, der auch wirklich bei Dir gelaufen ist. Wie hast Du bisher programmiert, wenn Du nicht die Dokumentation zu den von Dir verwendeten Module kennst?
DGUV-V3
User
Beiträge: 24
Registriert: Dienstag 12. April 2016, 09:50

Sirius3 hat geschrieben:@DGUV-V3: jetzt müßte ich wieder wissen, was Du genau gemacht hast und wie der Fehler incl. Traceback genau aussieht. Diesmal vielleicht der passende Code zum Fehler, der auch wirklich bei Dir gelaufen ist. Wie hast Du bisher programmiert, wenn Du nicht die Dokumentation zu den von Dir verwendeten Module kennst?
Hier meine Fehlermeldung:
Traceback (most recent call last):
File "DBschreiben.py", line 16, in <module>
cursor.execute('UPDATE testdb set letztepruefung = :sheet.cell_value(row,8), %s), naechstepruefung = DATE_ADD(:sheet.cell_value(row,8), 0), Interval 2 Years) WHERE seriennummer =:sheet.cell_value(row,4), 0') and ':sheet.cell_value(row,9), 0) = OK) VALUES (%s,%s)'
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':sheet.cell_value(row,8), %s), naechstepruefung = DATE_ADD(:sheet.cell_value(row' at line 1")

und Hier der Code dazu:
[Codebox=python file=Unbenannt.py]

#!/usr/bin/env python
# -*- coding: utf8 -*-

import xlrd
import datetime
import MySQLdb
_encoding = 'utf-8'

mysql = MySQLdb.connect(host='localhost', user='root', passwd='xy', db='testdb')
cursor = mysql.cursor()
daten = xlrd.open_workbook('Test.xls',formatting_info=True)
query = """Insert Into orders (seriennummer, klassifikation, region, sc, betirebsart, hnr, liegenschaft, gebaeude, etage, raum, verantwortlicher, eib, letzepruefung, naechstepruefung) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,) """

sheet = daten.sheet_by_index(0)

for row in range (sheet.nrows):
cursor.execute('UPDATE testdb set letztepruefung = :sheet.cell_value(row,8), 0), naechstepruefung = DATE_ADD(:sheet.cell_value(row,8), 0), Interval 2 Years) WHERE seriennummer =:sheet.cell_vallue(row,4),0') and ':sheet.cell_value(row,9), 0) = OK) Values (%s,%s)'
cursor.close()
mysql.comit()
mysql.close()
[/Codebox]
BlackJack

@DGUV-V3: Das ist immer noch der gleiche Fehler wie vorhin. Lern Python und lern SQL. Sonst wird das nichts. Es sei denn jemand anders hier schreibt wieder ein weiteres Stück Code um der Lösung *Deines* Problems näher zu kommen.
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

@DGUV-V3: nochmal Schritt für Schritt.

Erst dachte ich, der Code kann ja gar nicht laufen, weil eine Klammer zu fehlt, aber mit Syntaxhighlighting kam ich dann drauf. Was bitteschön glaubst Du was das "and" in der Zeile

Code: Alles auswählen

cursor.execute('UPDATE testdb set letztepruefung = :sheet.cell_value(row,8), 0), naechstepruefung = DATE_ADD(:sheet.cell_value(row,8), 0), Interval 2 Years) WHERE seriennummer =:sheet.cell_vallue(row,4),0') and ':sheet.cell_value(row,9), 0) = OK) Values (%s,%s)'
macht?

Was glaubst Du sind in dieser SQL-Anweisung Platzhalter? Und was ist an dem Satz: "man kann nicht einfach Pythoncode in ein SQL-Statement einflechten. Du mußt Platzhalter verwenden." unverständlich? Und wie viele Klammern haben keinen Partner?
Antworten