code: func (db *Database) Delete(value DBModel) error {
  	defer db.clear()
  	// if Model has been called, skip table name inference procedure
  	if len(db.tables) == 0 {
  		db.tables = append(db.tables, handleIdentifier(value.TableName()))
  		db.models = append(db.models, value)
  	}
  
  	// If where is empty, try to infer a primary key by value
  	// otherwise buildDelete panics (where is mandatory)
  	db = db.Where(value)
  
  	// Compile query
  	var stmt *sql.Stmt
  	var err error
  	if stmt, err = db.db.Prepare(db.buildDelete()); err != nil {
  		return err
  	}
  
  	// Pass query parameters and executes the query
  	if _, err = stmt.Exec(db.whereValues...); err != nil {
  		return err
  	}
  
  	// Clear fields of value after delete, because the object no more exists
  	value = reflect.Zero(reflect.ValueOf(value).Type()).Interface().(DBModel)
  
  	return nil
  }
docs: // Delete executes DELETE FROM value.TableName where .Where()
  // Calling .Where is mandatory. You can pass a nil pointer to value if you just setted
  // the tablename with Model.