2010년 1월 25일 월요일

Python - DB Class

# -*- coding:utf-8 -*-
import MySQLdb
import pgdb

class Init:
    def __init__(self, db_driver, db_host, db_user, db_pass, db_name):
        if db_driver == 'mysql':
            self._db = SKY_MySQL(db_host, db_user, db_pass, db_name)
        elif db_driver == 'pgsql':
            self._db = SKY_PostgreSQL(db_host, db_user, db_pass, db_name)

    def commit(self):
        self._db.commit()

    def rollback(self):
        self._db.rollback()

    def query(self, sql):
        self._db.query(sql)

    def getSelect(self, sql):
        self.query(sql)
        return self._db.getSelect(sql)

    def setInsert(self, table_name, field_values):
        field_name = ''
        filed_value = ''
        for data in field_values.items():
            field_name += data[0]+","
            filed_value += "'"+MySQLdb.escape_string(str(data[1]))+"',"

        field_name = field_name[0:-1]
        filed_value = filed_value[0:-1]

        sql = 'insert into '+table_name+'('+field_name+') values('+filed_value+')'
        return self._db.setInsert(sql)

    def setUpdate(self, table_name, field_values, wheres=''):
        sql_update = ''
        for data in field_values.items():
            sql_update += data[0]+"='"+MySQLdb.escape_string(str(data[1]))+"',"

        sql_update = sql_update[0:-1]

        if wheres != '':
            wheres = ' where '+wheres

        sql = 'update '+table_name+' set '+sql_update+wheres
        return self._db.setUpdate(sql)

    def setDelete(self, table_name, wheres=''):
        if wheres != '':
            wheres = ' where '+wheres

        sql = 'delete from '+table_name+wheres
        return self._db.setDelete(sql)


class SKY_MySQL:
    def __init__(self, db_host, db_user, db_pass, db_name):
        try:
            self.conn = MySQLdb.connect (host=db_host, user=db_user, passwd=db_pass, db=db_name)
            self.DictCursor = MySQLdb.cursors.DictCursor(self.conn)
        except Exception, e:
            raise SystemExit('MySQL connect error : '+db_host)

    def __del__(self):
        try:
            self.DictCursor.close()
            self.conn.close()
        except Exception, e:
            pass

    def commit(self):
        self.conn.commit()

    def rollback(self):
        self.conn.rollback()

    def query(self, sql):
        try:
            self.DictCursor.execute(sql)
            self.commit()
        except Exception, e:
            raise SystemExit('MySQL query error : '+sql)

    def getSelect(self, sql):
        return self.DictCursor.fetchall()

    def setInsert(self, sql):
        self.query(sql)
        return self.DictCursor.lastrowid

    def setUpdate(self, sql):
        self.query(sql)

    def setDelete(self, sql):
        self.query(sql)

class SKY_PostgreSQL:
    def __init__(self, db_host, db_user, db_pass, db_name):
        try:
            self.conn = pgdb.connect(db_host+':'+db_name+':'+db_user+':'+db_pass)
            self.cursor = self.conn.cursor()
        except Exception, e:
            raise SystemExit('PostgreSQL connect error : '+db_host)


    def __del__(self):
        try:
            self.cursor.close()
            self.conn.close()
        except Exception, e:
            pass

    def commit(self):
        self.conn.commit()

    def rollback(self):
        self.conn.rollback()

    def query(self, sql):
        try:
            self.cursor.execute(sql)
            self.commit()
        except Exception, e:
            raise SystemExit('PostgreSQL query error : '+sql)

    def getSelect(self, sql):
        return self.cursor.fetchall()

    def setInsert(self, sql):
        self.query(sql)
        return self.cursor.rowcount

    def setUpdate(self, sql):
        self.query(sql)

    def setDelete(self, sql):
        self.query(sql)

0 개의 댓글:

댓글 쓰기