params:
        model_class: The queried model class
        strict: bool -> If True, queries are run with EQUAL(=) operator.
        If False: Queries are run with RLIKE keyword
        returnDict: bool -> Return a list if dictionaries(field_names: values)
        fetchOne: bool -> cursor.fetchone() else: cursor.fetchall()
        where: **kwargs for quere WHERE condition.
        if where in {}: Returns all results in the table

        Usage:
        print(Session().get(Employee, id=1, returnDict=True))

def get(self, model_class, strict=True, returnDict=False, fetchOne=False, **where):
        '''params:
        model_class: The queried model class
        strict: bool -> If True, queries are run with EQUAL(=) operator.
        If False: Queries are run with RLIKE keyword
        returnDict: bool -> Return a list if dictionaries(field_names: values)
        fetchOne: bool -> cursor.fetchone() else: cursor.fetchall()
        where: **kwargs for quere WHERE condition.
        if where in {}: Returns all results in the table

        Usage:
        print(Session().get(Employee, id=1, returnDict=True))
        '''
        self.typeassert(model_class, strict, returnDict, where)

        table = model_class.__name__.lower()
        with Session(self.settings) as conn:
            if not where:
                query = f'SELECT * FROM {table}'
            else:
                query = f'SELECT * FROM {table} WHERE'
                
            index= 1
            operator = '=' if strict else 'RLIKE'

            for key, value in where.items():
                if index == 1:
                    query+= " %s %s '%s' "%(key, operator, value)
                else:
                    query+= " AND %s %s '%s' "%(key, operator, value)
                index += 1
                
            try:
                cursor=conn.cursor()
                cursor.execute(query)
            except mysql.Error as e:
                if e.errno == 1146:
                    print(f"The table {table} does not exist")
                    return []

                else:
                    raise e
            else:
                if fetchOne:
                    colnames = [d[0] for d in cursor.description]
                    results = cursor.fetchone()
                    if returnDict:
                        return {col: val for col, val in zip(colnames, results)}\
                        if results else {}
                    return results

                return self.handleResult(cursor, returnDict)