Seite 1 von 1

SQL verbindungs Klasse

Verfasst: Freitag 2. März 2007, 12:48
von polypus
Ich habe eine kleine Klasse gemacht, um mich zu einer beliebigen MySQL Datenbank zu verbinden.

Hier mal der Code:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: iso-8859-1 -*- 

    #########################################################

    #    SQL-connection and executing class                
    #    polypus - March 2007                     

    #########################################################


import MySQLdb
import sys

#-------------defining class------------------


class SqlAccess:
    """ SQL Access class Instance"""
    
    #----Constructor----
    def __init__(self, host, user, passwd, db):
        self.host   = host
        self.user   = user
        self.passwd = passwd
        self.db     = db

#--------defining common functions--------

    #----connecting-----
    def db_connect(self):
        try:
            self.database = MySQLdb.connect(self.host, self.user, 
                                            self.passwd, self.db)
        except:
            print "Error in specified parameters; check your SQL-access-data!"
            print "Exiting"
            sys.exit()


    #--executing query--
    def db_execute(self, query):
        try:
            self.cursor = self.database.cursor()
            self.cursor.execute(query)
            result = self.cursor.fetchall()
            return result
        except:
            print "Error in Mysql-query: ", query
            print "or database not connected!"


    #------closing------
    def db_close(self):
        self.cursor.close()
        self.database.close()
Nun gefällt mir das ja recht gut, aber nachdem das mein erstes Ding in dieser Art ist,
hätte ich gern ein paar Ratschläge/etwas Input, was man alles besser/schöner/sicherer machen könnte. :)

Cool wäre zum beispiel wenn das Script bei execute selber erkennen würde,
welchen Fehler es gibt (nicht verbunden oder falsche SQL Syntax). Ich weiß jetzt aber nicht, ob das nicht zu viel Aufwand bedeutet (weil das script ja sowieso eingebunden werden soll... :roll:

Verfasst: Freitag 2. März 2007, 13:01
von jens
Generell sollte man IMHO nicht alle exceptions Abfangen und dann keine Info's dazu ausgeben ;)

Ich mach das meist so:

Code: Alles auswählen

try:
    "...mach irgendwas..."
except Exception, e:
    print "Error:", e
Einen richtigen Traceback kannst du so ausgeben:

Code: Alles auswählen

try:
    "...mach irgendwas..."
except Exception, e:
    import sys, traceback
    etype, value, tb = sys.exc_info()
    tb = tb.tb_next
    tb_lines = traceback.format_exception(etype, value, tb)
    print "".join(tb_lines)
Aber was willst du eigentlich machen???
Ich würde mir da ehr SQLAlchemy ansehen!

Verfasst: Freitag 2. März 2007, 13:23
von polypus
Naja, ich Habs eigentlich nur als Fingerübung gemacht, und es ist auch nix besonderes.
Ich wollte das nur auslagern, weil ich sowas öfter brauche und dann muss ich es nicht jedesmal neu reinschreiben...
:oops:

Und als ~Anfänger bin ich mir bei manchen Sache noch nicht so sicher.

SQLAlchemy ist mir neu, werd ich mir aber mal anschauen... :idea:

Verfasst: Freitag 2. März 2007, 14:43
von jens
Hab mal die Seite [wiki]try...except[/wiki]erstellt... Wobei da noch einige Sachen fehlen, wie z.B. "finally"...

Verfasst: Freitag 2. März 2007, 15:25
von polypus
ich hab mal das reingebaut:

Code: Alles auswählen

except MySQLdb.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])
scheint zu klappen. Nur sind die Eingebauten Fehlerbezeichungen in MySQLdb scheinbar nicht die besten..

Verfasst: Freitag 2. März 2007, 15:27
von jens

Verfasst: Freitag 2. März 2007, 15:37
von polypus
jens hat geschrieben:Schau dir auch mal das an: http://www.python-forum.de/topic-8002.html
Da läuft es einem ja kalt den Rücken runter beim Lesen (und ich verstehe grad mal die Hälfte...). :?

Was soll ich jetzt daraus schließen? MySQLdb verschmeißen und SQLAlchemy verwenden?
Naja, noch habe ich ja keine Probleme...
Privat werde ich sowieso eher SQLite mal intensiver beäugen! :shock:

Verfasst: Samstag 10. März 2007, 21:10
von jens
jens hat geschrieben:Einen richtigen Traceback kannst du so ausgeben:

Code: Alles auswählen

try:
    "...mach irgendwas..."
except Exception, e:
    import sys, traceback
    etype, value, tb = sys.exc_info()
    tb = tb.tb_next
    tb_lines = traceback.format_exception(etype, value, tb)
    print "".join(tb_lines)
Ich sehe gerade im Wiki, das es viel einfacher geht:

Code: Alles auswählen

try:
    "...mach irgendwas..."
except Exception, e:
    import traceback
    print traceback.format_exc()
Siehe: [wiki]try...except[/wiki]
Wieder was gelernt :)