""" mysql is a dbx module for the MySQL database server. mysql requires the DB-API MySQLdb module. """ import MySQLdb as _mysql def escape(value): if isinstance(value, basestring): return _mysql.escape_string(value) elif isinstance(value, (int, long)): return value else: raise TypeError def escapeAll(values): return _mysql.escape_sequence(values) class Error(Exception): pass class SQLError(Error): pass class MySQL: C_NAME = 0 C_TYPE = 1 C_NULL = 2 C_DEFAULT = 3 def __init__(self, dbname=None, *args): if dbname is not None: self.connect(dbname, *args) def __del__(self): try: self.close() except: pass def connect(self, dbname, hostname="localhost", username="", password=""): try: self.conn = _mysql.connect(db=dbname, host=hostname, user=username, passwd=password) except _mysql.Error, e: raise Error, "%i: %s" % (e.args[0], e.args[1]) self.cursor = self.conn.cursor(_mysql.cursors.DictCursor) def selectDB(self, dbname): try: self.conn.select_db(dbname) except _mysql.Error, e: raise Error, "%i: %s" % (e.args[0], e.args[1]) def close(self): self.cursor.close() self.conn.close() def query(self, sql): try: self.cursor.execute(sql) except _mysql.Error, e: raise SQLError, ("%i: %s" % (e.args[0], e.args[1]), sql) if self.cursor.rowcount == -1: return None return self.cursor.rowcount def rowQuery(self, sql): self.query(sql) return self.cursor.fetchone() def listQuery(self, sql): self.query(sql) return self.cursor.fetchall() def queryID(self): return self.cursor.lastrowid def version(self): return self.conn.get_server_info() def tables(self): tables = self.listQuery("SHOW TABLES") return [i.values()[0] for i in tables] def columns(self, table): sql = "SHOW COLUMNS FROM `%s`" % escape(table) columns = self.listQuery(sql) ret = [] for i in columns: null = i["Null"] == "YES" ret.append((i["Field"], i["Type"], null, i["Default"])) return ret