<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def append(self, symbol, item, upsert=False, metadata=None, audit=None, **kwargs):
 """ Appends data from item to symbol's data in the database. Is not idempotent Parameters symbol: str the symbol for the given item in the DB item: DataFrame or Series the data to append upsert: write data if symbol does not exist metadata: ? optional per symbol metadata audit: dict optional audit information kwargs: passed to write if upsert is true and symbol does not exist """

        sym = self._get_symbol_info(symbol)
        if not sym:
            if upsert:
                return self.write(symbol, item, metadata=metadata, audit=audit, **kwargs)
            else:
                raise NoDataFoundException("Symbol does not exist.")
        if audit is not None:
            audit['symbol'] = symbol
            audit['action'] = 'append'
        self.__update(sym, item, metadata=metadata, combine_method=SER_MAP[sym[SERIALIZER]].combine, audit=audit)