Daten in MySQL Datenbank schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

Servus zusammen,

ich habe mal wieder Probleme damit Daten in eine Datenbank zu schreiben. Ich arbeite mit dem MySQL Community Server 5.6.19 Modul von folgender Seite: http://dev.mysql.com/downloads/. Laufen soll das alles auf einer VM mit Win Server 2008 R2 Enterprise wobei das "eigentlich" keine Rolle spielen sollte.

Im MySQL Workbench habe ich eine DB sowie eine Tabelle mit 2 Spalten erstellt:

Code: Alles auswählen

CREATE SCHEMA `python_test` ;

Code: Alles auswählen

CREATE TABLE `python_test`.`test1` (
  `ID` INT NOT NULL,
  `Wort` VARCHAR(45) NULL,
PRIMARY KEY (`ID`));
Nun versuche ich durch dieses Package https://pypi.python.org/pypi/MySQL-python mit einem Python Code die MySQL Tabelle zu befuellen:

Code: Alles auswählen

import MySQLdb

db = MySQLdb.connect(host="localhost", 
                     user="root", #SELECT * FROM mysql.user
                      passwd="****",
                      db="python_test")

cur = db.cursor()

try:
    cur.execute("INSERT INTO `python_test`.`test1` VALUES (ID,Wort)",(188,'nein'))
    db.commit()
    print 'geklappt'
except:
    db.rollback()
    print 'nicht geklappt'

db.close()
Auch andere Schreibweisen des Tabellennamen im INSERT INTO Befehl haben keine Änderung gebracht. Das Befuellen der MySQL DB/Tabelle funktioniert nicht. Beim Ausführen springt er immer in die Except-Schleife.

Kann mir jemand weiterhelfen? Am besten helfen mir immer Codebeispiele weiter oder verweise auf solche :)

Grüße und wir immer herzlichen Dank!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

dein execute-Statement ist so nicht korrekt. Woher soll Python wissen, welche Variablen im Statement mit welchen Werten des übergebenen Tupels befüllt werden sollen? Je nach Datenbank musst du da einen Platzhalter verwenden. Siehe hier. Keine Ahnung wie das bei deiner Datenbank ist, das musst du nachschauen oder einfach kurz ausprobieren.

Ansonsten kannst du aber an deinem Code etwas sehr wichtiges lernen: Verwende niemals ein leeres Except, das verschluckt dir alle Fehlermeldungen. In deinem Fall verwirfst du die Fehlermeldung sogar noch, so dass du sie nie zu Gesicht bekommst. Du musst sie mindestens ausgeben oder aber loggen, sonst baust du dir sehr üble Fehler ein. Du landest in ungültigen Programmzustanden, bekommst seltsames Programmverhalten, dein Programm steigt mit einer Exception an einer anderen Stelle aus und solche Fehler zu finden ist nicht nur schwierig und mit viel Aufwand verbunden, sondern auch noch extrem nervig. Fange also nur die Fehler ab, die auch wirklich auftreten können. In deinem Fall könnst du auch den Fehler erstmal an einen Namen binden und ausgeben, dann hätte dir die Fehlermeldung den Fehler auch schon gesagt. Bzw. wo er sich befindet.
Das Leben ist wie ein Tennisball.
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

Hab's gefunden ... danke :)
Antworten