"insert into"funktioniert nicht bei Datenbanken Typ InnoDB

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Michaela
User
Beiträge: 4
Registriert: Dienstag 3. Januar 2012, 12:37

Hallo,
mein Problem ist, dass seitdem ich eine neue Version von XAMPP auf den Rechnern habe (Betriebssystem Windows 7) und wie sonst mit python und pymysql auf die Datenbanken zugreife, dass alles funktioniert, nur der Befehl "insert into" funktioniert nur bei den alten Tabellen vom Typ MyISAM. Bei den Tabellen vom Typ InnoDB wird der Datensatz zwar mitgezählt (z. B. bei "autoincrement"), aber nicht eingefügt!!!
Kann mir jemand helfen?
Michaela
BlackJack

@Michaela: Vielleicht irgendwo ein `commit()` vergessen was bei Datenbanken die keine Transaktionen können nicht weiter auffällt!?
Michaela
User
Beiträge: 4
Registriert: Dienstag 3. Januar 2012, 12:37

Nein, es geht um ganz einfachen Quelltext,
z. B.:
from pymysql import *

def db():
con = connect(host="localhost", user="root", passwd="")
print "verbunden"
cur = con.cursor()
cur.execute("use firma")
cur.execute("insert into projekt (Projnr, Kurzbezeichnung) Values (3, 'Spass')")
con.close()
db()
BlackJack

@Michaela: Und da fehlt ganz offensichtlich das `commit()` damit die Transaktion auch in die DB festgeschrieben wird.
Michaela
User
Beiträge: 4
Registriert: Dienstag 3. Januar 2012, 12:37

Wie schon erwähnt, bei den Tabellen vom Typ MyISAM klappt es so ganz simple, auch ohne commit(), werde es natürlich ausprobieren ..., melde mich dann noch mal!
Michaela
User
Beiträge: 4
Registriert: Dienstag 3. Januar 2012, 12:37

@BlackJack:
Vielen Dank :-), das war's wirklich!!
Dass der Typ so einen Unterschied macht ...
deets

Ja, das ist ja auch klar - denn es ist genau die Transaktionsfaehigkeit, die diese beiden Tabellentypen unterscheidet.
BlackJack

@Michaela: Ich würde übrigens sagen dass hier MyISAM aus dem Rahmen fällt, denn die meisten DBMS können Transaktionen und erfordern deshalb auch, dass man sich im Code in irgend einer Weise damit auseinander setzt. Bei Python-Quelltext der das nicht macht, würde ich soweit gehen und sagen der ist fehlerhaft, selbst wenn er zufällig funktioniert wenn man eine nicht-transaktionsfähige DB oder Tabellenart verwendet.
Antworten