INSERT Befehl wird nicht ausgeführt

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Vic
User
Beiträge: 2
Registriert: Samstag 9. Juni 2007, 07:57

Hallo Leute!

ich habe gerade ein mächtiges Problem und komme absolut nicht weiter!
Und zwar portiere ich den Code eines größeren Programms von Perl nach Python, was an sich gut funktioniert. Jedoch stresst meine Datenbankklasse rum.
Die Klasse kann sich problemlos mit der MySQL Datenbank verbinden und Querys abfragen. INSERT und UPDATE Befehle werden auch anstandslos angenommen und ein darauf folgender SELECT Befehl spuckt die neu eingetragenen Werte auch wieder aus.
Schaue ich jetzt aber mit phpMyAdmin in die Datenbank rein, so finde ich diesen Eintrag nicht wieder! Er existiert einfach nicht.
Das gleiche Problem habe ich auch mit meiner MS SQL Datenbankklasse, die auf 'pymssql' aufbaut.
Die benötigten Zugriffsrechte existieren. Die Perl Implementation funktioniert tadellos.

Code: Alles auswählen

#!/usr/bin/python
import MySQLdb

class Database(object):
    def __init__(self, username, passwd, db, host):
        self.__dbh = None
        self.__cursor = None
        self.__result = None
        self.__user = username
        self.__pass = passwd
        self.__db = db
        self.__host = host
        self.openDB()

    def openDB(self):
        if (self.__user != "" and self.__pass != "" and self.__db != "" and self.__host != ""):
            self.__dbh = MySQLdb.connect(host=self.__host, user=self.__user, passwd=self.__pass, db=self.__db )
            self.__cursor = self.__dbh.cursor()
            
    def closeDB(self):
        if (self.__dbh != None and self.__cursor != None):
            self.__cursor.close()
            self.__dbh.close()
            
    def query(self, sql):
        self.__result = []
        self.__cursor.execute(sql)
        self.__result = self.__cursor.fetchall()
        self.__dbh.commit()
        
    def getItem(self, row, col):
        if (len(self.__result) > row):
            if (len(self.__result[row]) > col):
                return self.__result[row][col]
            else:
                return ""
        else:
            return ""
        
    def getRows(self):
        return len(self.__result)
        
    def getCols(self):
        if (self.getRows() > 0):
            return len(self.__result[0])
        else:
            return 0
            
if (__name__ == "__main__"):
    db = Database("user", "passwd", "database", "host")
    sql = "INSERT INTO config (section, setting, value) VALUES ('test', 'test2', 'test3')"
    db.query(sql)
    sql = "SELECT * FROM config WHERE section = 'test' AND setting = 'test2' AND value = 'test3'"
    db.query(sql)
    print "Rows:", db.getRows()
    print "Cols:", db.getCols()
    for i in range(0,db.getRows()):
        for j in range (0,db.getCols()):
            print str(db.getItem(i,j))+" | ",
        print ""
MfG

Vic
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Hast du die Anwendung testweise mal neu gestartet, nachdem du die Daten per PMA manuell in die Datenbank eingefügt hast?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich glaube da fehlen einfach nur die ``commit()``s, das ist alles.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Vic
User
Beiträge: 2
Registriert: Samstag 9. Juni 2007, 07:57

Thx,

das .commit() war's

Cya

Vic
Antworten