@bot.message_handler(content_types=['text']) стоит выше обработчика команды @bot.message_handler(commands=['profile']).@bot.message_handler(content_types=['text'])
def get_text_messages(message):handle_profile_command.__init__ и всёimport sqlite3
class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()
        with self.connection:
            self.cursor.execute('''
               CREATE TABLE IF NOT EXISTS Users ( 
                    id INTEGER PRIMARY KEY NOT NULL, 
                    user_id INTEGER NOT NULL, 
                    nickname TEXT (60), 
                    time_sub NOT NULL DEFAULT (0), 
                    signup TEXT DEFAULT setnickname 
                );
            ''')
    def add_user(self, id):
        with self.connection:
            self.cursor.execute("INSERT INTO `Users` (`id`) VALUES (?)", (id,))
            return self.cursor.execute
    def user_exists(self, id):
        with self.connection:
            result = self.cursor.execute("SELECT * FROM `Users` WHERE  `id` = ?", (id,)).fetchall()
            return bool(len(result))add_user т.к. он принимает только один параметр - ID, а у вас 3 NOT NULL параметра      teacher_id нужно запоминать на моменте edit_teacher_handler, так же сохранив его в FSM. Получаем идентификатор преподавателя из message.textв message.text ведь лежит номер класса. К тому же наверное в БД ID является числом, а не строкой. Пробовали смотреть какие данные приходят в
update_teacher?      ?, как написано в докеdef is_number(_str):
    try:
        int(_str)
        return True
    except ValueError:
        return Falsenomer = str(message.text)Столбец user_name есть, но не работает
cursor.execute('UPDATE lun_db SET user_name = ? WHERE user_id = ?', (username, userid))то выводит все строки, но последняя строка None
print(get_all()) что лиdef get_all():
    records = []
    cur.execute('SELECT * FROM stocks')
    rows = cur.fetchall()
    for row in rows:
        records.append({'name': str(row[1]), 'id': str(row[0])})
    return records