Seite 2 von 2

Re: Hilfe bei Datensätze aktualliesieren in eine MySQL DB

Verfasst: Mittwoch 20. April 2016, 13:16
von Sirius3
@DGUV-V3: wie Du aus der Dokumentation entnehmen kannst ist der Platzhalter für MySQLDB %s.

Re: Hilfe bei Datensätze aktualliesieren in eine MySQL DB

Verfasst: Mittwoch 20. April 2016, 14:31
von DGUV-V3
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

Re: Hilfe bei Datensätze aktualliesieren in eine MySQL DB

Verfasst: Mittwoch 20. April 2016, 14:37
von Sirius3
@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?

Re: Hilfe bei Datensätze aktualliesieren in eine MySQL DB

Verfasst: Mittwoch 20. April 2016, 15:08
von DGUV-V3
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]

Re: Hilfe bei Datensätze aktualliesieren in eine MySQL DB

Verfasst: Mittwoch 20. April 2016, 15:31
von 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.

Re: Hilfe bei Datensätze aktualliesieren in eine MySQL DB

Verfasst: Mittwoch 20. April 2016, 17:46
von Sirius3
@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?