':param old_info: The info/vuln instance to be updated in the kb.
:param update_info: The info/vuln instance with new information
:return: Nothing'

@requires_setup
def update(self, old_info, update_info):

    old_not_info = (not isinstance(old_info, (Info, InfoSet, Shell)))
    update_not_info = (not isinstance(update_info, (Info, InfoSet, Shell)))
    if (old_not_info or update_not_info):
        msg = 'You    MUST    use    raw_write/raw_read    to    store    non-info    objects    to    the    KnowledgeBase.'
        raise TypeError(msg)
    old_uniq_id = old_info.get_uniq_id()
    new_uniq_id = update_info.get_uniq_id()
    pickle = cpickle_dumps(update_info)
    query = 'UPDATE    %s    SET    pickle    =    ?,    uniq_id    =    ?    WHERE    uniq_id    =    ?'
    params = (pickle, new_uniq_id, old_uniq_id)
    result = self.db.execute((query % self.table_name), params).result()
    if result.rowcount:
        self._notify_observers(self.UPDATE, old_info, update_info)
    else:
        ex = 'Failed    to    update()    %s    instance    because    the    original    unique_id    (%s)    does    not    exist    in    the    DB,    or    the    new    unique_id    (%s)    is    invalid.'
        raise DBException((ex % (old_info.__class__.__name__, old_uniq_id, new_uniq_id)))
