

def _base_set(self, mode, key, value, timeout=None):
    if (timeout is None):
        timeout = self.default_timeout
    db = router.db_for_write(self.cache_model_class)
    table = connections[db].ops.quote_name(self._table)
    cursor = connections[db].cursor()
    cursor.execute(('SELECT COUNT(*) FROM %s' % table))
    num = cursor.fetchone()[0]
    now = timezone.now()
    now = now.replace(microsecond=0)
    if settings.USE_TZ:
        exp = datetime.utcfromtimestamp((time.time() + timeout))
    else:
        exp = datetime.fromtimestamp((time.time() + timeout))
    exp = exp.replace(microsecond=0)
    if (num > self._max_entries):
        self._cull(db, cursor, now)
    pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)
    encoded = base64.encodestring(pickled).strip()
    cursor.execute(('SELECT cache_key, expires FROM %s WHERE cache_key = %%s' % table), [key])
    try:
        result = cursor.fetchone()
        if (result and ((mode == 'set') or ((mode == 'add') and (result[1] < now)))):
            cursor.execute(('UPDATE %s SET value = %%s, expires = %%s WHERE cache_key = %%s' % table), [encoded, connections[db].ops.value_to_db_datetime(exp), key])
        else:
            cursor.execute(('INSERT INTO %s (cache_key, value, expires) VALUES (%%s, %%s, %%s)' % table), [key, encoded, connections[db].ops.value_to_db_datetime(exp)])
    except DatabaseError:
        transaction.rollback_unless_managed(using=db)
        return False
    else:
        transaction.commit_unless_managed(using=db)
        return True

dataset/ETHPy150Open AppScale/appscale/AppServer/lib/django-1.4/django/core/cache/backends/db.py DatabaseCache._base_set/original