code: def update(self, row, keys, ensure=None, types=None, return_count=False):
          
          row = self._sync_columns(row, ensure, types=types)
          args, row = self._keys_to_args(row, keys)
          clause = self._args_to_clause(args)
          if not len(row):
              return self.count(clause)
          stmt = self.table.update(whereclause=clause, values=row)
          rp = self.db.executable.execute(stmt)
          if rp.supports_sane_rowcount():
              return rp.rowcount
          if return_count:
              return self.count(clause)
docs: Update a row in the table.
  
          The update is managed via the set of column names stated in ``keys``:
          they will be used as filters for the data to be updated, using the
          values in ``row``.
          ::
  
              # update all entries with id matching 10, setting their title columns
              data = dict(id=10, title='I am a banana!')
              table.update(data, ['id'])
  
          If keys in ``row`` update columns not present in the table, they will
          be created based on the settings of ``ensure`` and ``types``, matching
          the behavior of :py:meth:`insert() <dataset.Table.insert>`.