class_docstr: This overrides the default `_declarative_constructor` constructor.
  
  It skips the attributes that are not present for the model, thus if a
  dict is passed with some unknown attributes for the model on creation,
  it won't complain for `unknown field`s.
  Declares and int `_row_id` field for all tables
docstr: Add and commit
  
  Returns: saved object
docstr_tok: ["Add","and","commit","Returns",":","saved","object"]
code: def save(self, db_session):
      """Add and commit
  
      Returns: saved object
  
      """
      try:
          db_session.add(self)
          self._commit(db_session)
      except Exception as e:
          db_session.rollback()
          logger.error(f"Database save failed : {str(e)}")
          raise e
      return self
  
file_path: evadb/evadb/catalog/models/base_model.py
imports: from sqlalchemy import Column, Integer
  from sqlalchemy.exc import SQLAlchemyError
  from sqlalchemy.ext.declarative import declarative_base
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 2 for calling the CustomModel obj's underlying member method code with example usage: obj.save(db_session) and returns: self