def commit(self): global _db_ctx log.info('commit transaction...') try: _db_ctx.connection.commit() log.info('commit ok.') except: log.warning('commit failed. try rollback...') _db_ctx.connection.rollback() log.warning('rollback ok.') raise
def create_engine(user, password, database, host='127.0.0.1', port=3306, **kwargs): global engine if engine is not None: log.warning('Engine is already initialized.') return False params = dict(user=user, password=password, database=database, host=host, port=port) defaults = dict(use_unicode=True, charset='utf8', autocommit=False) for k, v in defaults.iteritems(): params[k] = kwargs.pop(k, v) params.update(kwargs) engine = _Engine(lambda: pymysql.connect(**params)) return True
def __new__(cls, name, bases, attrs): if name == 'Model': return type.__new__(cls, name, bases, attrs) if not hasattr(cls, 'subclasses'): cls.subclasses = {} if name not in cls.subclasses: cls.subclasses[name] = name else: log.warning('Redefine class: %s' % name) log.info('Scan ORMapping %s...' % name) mappings = dict() primary_key = None for k, v in attrs.iteritems(): if isinstance(v, Field): if not v.name: v.name = k log.info('Found mapping: %s => %s' % (k, v)) if v.primary_key: if primary_key: raise TypeError( 'Cannot define more than 1 primary key in class: %s' % name) if v.writable: log.warning( 'NOTE: change primary key to non-writable.') v.writable = False if v.nullable: log.warning( 'NOTE: change primary key to non-nullable.') v.nullable = False primary_key = v mappings[k] = v # check exist of primary key: if not primary_key: raise TypeError('Primary key not defined in class: %s' % name) for k in mappings.iterkeys(): attrs.pop(k) if '__table__' not in attrs: attrs['__table__'] = name.lower() attrs['__mappings__'] = mappings attrs['__primary_key__'] = primary_key attrs['__sql__'] = lambda self: _gen_sql(attrs['__table__'], mappings) for trigger in _triggers: if trigger not in attrs: attrs[trigger] = None return type.__new__(cls, name, bases, attrs)
def __new__(cls, name, bases, attrs): if name == 'Model': return type.__new__(cls, name, bases, attrs) if not hasattr(cls, 'subclasses'): cls.subclasses = {} if name not in cls.subclasses: cls.subclasses[name] = name else: log.warning('Redefine class: %s' % name) log.info('Scan ORMapping %s...' % name) mappings = dict() primary_key = None for k, v in attrs.iteritems(): if isinstance(v, Field): if not v.name: v.name = k log.info('Found mapping: %s => %s' % (k, v)) if v.primary_key: if primary_key: raise TypeError('Cannot define more than 1 primary key in class: %s' % name) if v.writable: log.warning('NOTE: change primary key to non-writable.') v.writable = False if v.nullable: log.warning('NOTE: change primary key to non-nullable.') v.nullable = False primary_key = v mappings[k] = v # check exist of primary key: if not primary_key: raise TypeError('Primary key not defined in class: %s' % name) for k in mappings.iterkeys(): attrs.pop(k) if '__table__' not in attrs: attrs['__table__'] = name.lower() attrs['__mappings__'] = mappings attrs['__primary_key__'] = primary_key attrs['__sql__'] = lambda self: _gen_sql(attrs['__table__'], mappings) for trigger in _triggers: if trigger not in attrs: attrs[trigger] = None return type.__new__(cls, name, bases, attrs)
def profiling(start, sql=''): t = time.time() - start if t > 0.1: log.warning('[PROFILING] [DB] %s: %s', t, sql) else: log.info('[PROFILING] [DB] %s: %s', t, sql)
def rollback(self): global _db_ctx log.warning('rollback transaction...') _db_ctx.connection.rollback() log.info('rollback ok.')