docs: def row_to_dict(r, keep_relationships = False):
      '''Converts an SQLAlchemy record to a Python dict. We assume that _sa_instance_state exists and is the only value we do not care about.
         If DeclarativeBase is passed then all DeclarativeBase objects (e.g. those created by relationships) are also removed.
      '''
      d = {}
      if not keep_relationships:
          # only returns the table columns
          t = r.__table__
          for c in [c.name for c in list(sqlalchemy_inspect(t).columns)]:
              d[c] = getattr(r, c)
          return d
      else:
          # keeps all objects including those of type DeclarativeBase or InstrumentedList and the _sa_instance_state object
          return copy.deepcopy(r.__dict__)