import datetime import re ################################## ## supported dbtype: sqlite, mysql dbtype = 'sqlite' __all__ = [ "dbtype", "rand", "create", "dtstr", "dtobj", "dtnorm", "dtback", ] ################# def doReplace(rstr, replacers): ''' Intrinsic method, replaces some stuff in 'create' ''' for (what, tofor) in replacers[dbtype]: rstr = rstr.replace(what, tofor) return rstr def rand(): ''' Correct sql name of random number generator ''' if dbtype == "sqlite": return "random()" else: return "rand()" def create(tablename, initstr): ''' SQL "CREATE TABLE tablename (field, field, field)" abstraction. - tablename -- name of table to be created - initstr -- comma-separated string of field declaration Returns string ready for execution in sql console. Useful shortcuts: - __ID__ -- primary key - INT -- integer value (like int(10)) - TEXT -- text field All indexes encountered are removed for sqlite. Example: >>> create( 'users', '__ID__, name varchar(1), active INT, about TEXT' ) ''' replacers = { 'sqlite': [('_ID_', 'id integer primary key default null'), ('INT', 'integer'), ('TEXT', 'varchar(65535)'), ('FINAL', ''), ], 'mysql': [('_ID_', 'id int(10) unsigned primary key NOT NULL auto_increment'), ('INT', 'int(10)'), ('TEXT', 'text'), ('FINAL', 'default charset=utf8'), ], } if dbtype == "sqlite": initstr = re.sub(r',(\s|\n)*index\s*\((.|\n)*$',"",initstr) return 'CREATE TABLE %s (%s) %s' % \ (tablename, doReplace(initstr, replacers), doReplace('FINAL', replacers)) def dtstr(dt): ''' Converts datetime to iso format string: was it sqlite-string representation or datetime -- don't matter. Example: >>> import datetime >>> dtstr(datetime.datetime.now()) >>> dtstr('2008-01-08 00:00:12') ''' if type(dt) == datetime.datetime: return dt.isoformat() else: return dt def dtobj(dt): ''' Converts datetime to "datetime.datetime" object: was it sqlite-string representation or datetime -- don't matter. Example: >>> import datetime >>> dtobj(datetime.datetime.now()) >>> dtobj('2008-01-08 00:00:12') ''' if type(dt) == datetime.datetime: return dt else: return datetime.datetime.strptime(dt[:19], "%Y-%m-%d %H:%M:%S") dtnorm = dtstr dtback = dtobj