class_docstr: Handles CRUD operations at the database level for Skills
docstr: Gets a skill by name. Skills are expected to have unique names.
  
  Parameters:
      skill_name (str): The name of the skill
      project_name (str): The name of the containing project
  
  Returns:
      skill (db.Skills): The database skill object
  
  Raises:
      ValueError: If `project_name` does not exist
docstr_tok: ["Gets","a","skill","by","name",".","Skills","are","expected","to","have","unique","names",".","Parameters",":","skill_name","(","str",")",":","The","name","of","the","skill","project_name","(","str",")",":","The","name","of","the","containing","project","Returns",":","skill","(","db.Skills",")",":","The","database","skill","object","Raises",":","ValueError",":","If","`","project_name","`","does","not","exist"]
code: def get_skill(
      self, skill_name: str, project_name: str = "mindsdb"
  ) -> db.Skills:
      """
      Gets a skill by name. Skills are expected to have unique names.
  
      Parameters:
          skill_name (str): The name of the skill
          project_name (str): The name of the containing project
  
      Returns:
          skill (db.Skills): The database skill object
  
      Raises:
          ValueError: If `project_name` does not exist
      """
  
      project = self.project_controller.get(name=project_name)
      return db.Skills.query.filter(
          db.Skills.name == skill_name,
          db.Skills.project_id == project.id,
      ).first()
  
file_path: mindsdb/mindsdb/interfaces/skills/skills_controller.py
imports: from typing import Dict, List
  from mindsdb.interfaces.storage import db
  from mindsdb.interfaces.database.projects import ProjectController
  from sqlalchemy.orm.attributes import flag_modified
label_desc: Use image node_id 2 for calling the SkillsController obj's underlying member method code with example usage: obj.get_skill(skill_name, project_name) and returns: db