Daten in Datenbank eintragen Problem

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
Mathmos
User
Beiträge: 36
Registriert: Dienstag 10. August 2010, 21:31

Hallo,

ich habe ein Problem mit dem Eintragen von Daten in die Datenbank.
Meine Code sieht so aus:

Code: Alles auswählen

c_topic = verbindung.cursor()
daten_topic = ((int_ergebnis3, 26, "cool.gif", 0, int_ergebnis_user, time.time(), "TEST", 0, 0, 0, 0, 0, 0),)
c_topic.executemany("INSERT INTO webs_forum_topics VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", daten_topic)
Das komische daran ist, ich habe den Code schon verwendet, allerdings mit ein par weniger zu übermittelnden Werden, und da hat er funktioniert.

Die Fehlermeldung sieht wie folgt aus.
Leider werde ich kein Stück schlau drauß.

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
    return self.func(*args)
  File "C:\Python25\xX Beispeile Xx\test.py", line 237, in Upload
    c_topic.executemany("INSERT INTO webs_forum_topics VALUES(%s, %s, %s, %s, %s
, %s, %s, %s, %s, %s, %s, %s, %s)", daten_topic)
  File "C:\Python25\lib\site-packages\MySQLdb\cursors.py", line 218, in executem
any
    r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]]))
  File "C:\Python25\lib\site-packages\MySQLdb\cursors.py", line 312, in _query
    rowcount = self._do_query(q)
  File "C:\Python25\lib\site-packages\MySQLdb\cursors.py", line 276, in _do_quer
y
    db.query(q)
OperationalError: (1136, "Column count doesn't match value count at row 1")


EDIT: so ersten fehler behoben... nun hab ich aber noch n andern... (fehler coder erneuert)

EDIT2: Problem gelöst. ich hab einen eintrag vergessen. Datenbank hat 14 spalten, ich hab nur 13 übergeben -.-
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Mal abgesehen davon, dass mir 14 Spalten in einer Tabelle schon sehr viel vorkommen, solltest du unbedingt an den Namen arbeiten. Entscheide dich für deutsche oder englische Bezeichner, eine Vermischung kann doch keiner Lesen. Vergesse deine seltsame Typennotation, die ist vollkommen überflüssig. Wenn du aus dem Namen nicht schließen kannst, was du mit einem Objekt anfängst, dann machst du etwas falsch. Hinzu kommt, dass sich Typen sehr schnell ändern können. Das führt natürlich direkt zu dem nächsten Punkt: "int_ergebnis3" und "int_ergebnis_user" sind keine richtigen Namen. In zwei wochen wirst du nicht mehr sofort wissen, für was die Namen stehen.

Und natürlich noch der obligatorische Hinweis auf PEP 8.

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
Mathmos
User
Beiträge: 36
Registriert: Dienstag 10. August 2010, 21:31

ja, das stimmt wohl das ich in 2 wochen das vllt nicht mehr weiß,
aber ich habe alles gut kommentiert, also sollte ich da schnell wieder rein finden ;)

mein lehrer meinte schon damals, das ich einen eigenen programier style habe... und ich glaube auch nicht das ich das ändern kann^^
Antworten