Задать вопрос
MRUT_book
@MRUT_book
ара ара

Почему появляется ошибка Sqlite3.OperationalError: table users has no column named name?

Привет, короче я начинающий программист, решил сделать бота на библиотеке телебот, но возникла ошибка что в таблице нет столбца name, перепроверил всё 100 раз, но так и не понял в чем ошибка, буду благодарен помощи.
Код естественно не весь

@bot.callback_query_handler(func=lambda callback:callback.data)
def check_callback(callback):
    if callback.data == 'moryak':
        conn = sqlite3.connect('users.sql')                
        cur = conn.cursor()
        cur.execute("CREATE TABLE IF NOT EXISTS users (' "                                                              
                    "id INTEGER auto_increment PRIMARY KEY, name TEXT, title TEXT, salary INTEGER, "
                    "exper INTEGER, age INTEGER, sea TEXT, dwt TEXT, motor TEXT, eng TEXT, "
                    "tele TEXT, email TEXT, trip TEXT, seek TEXT, extra TEXT')")
        conn.commit()
        cur.close()
        conn.close()

  #вопрос 1 
    elif callback.data == 'answer':
         bot.send_message(callback.message.chat.id, '1.Как вас зовут? \nПример: Иванов Иван')
    #вопрос 2 
         @bot.message_handler(content_types=['text'])
         def ans2(message):
             global name
             name = message.text.strip()
             bot.send_message(callback.message.chat.id, '2.Какая ваша должность? \nПример: Водитель')
             bot.register_next_step_handler(message, ans3)

   # финиш
         @bot.message_handler(content_types=['text'])
         def finish(message):
             extra = message.text.strip()

             conn = sqlite3.connect('users.sql')
             cur = conn.cursor()
             cur.execute(f'INSERT INTO users (name, title, salary, exper, age, sea, dwt, motor, eng, tele, email, trip, seek, extra)'
                         f' VALUES ("{name}", "{title}", "{salary}", "{exper}", "{age}", "{sea}", "{dwt}", '
                         f'"{motor}", "{eng}", "{tele}", "{email}", "{trip}", "{seek}", "{extra}")')
             conn.commit()
             cur.close()
             conn.close()
             bot.send_message(callback.message.chat.id, 'Спасибо за ответы!')
  • Вопрос задан
  • 822 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@rPman
Что за одинарная ковычка после скобки
CREATE TABLE IF NOT EXISTS users (' <---
и она же идет в конце списка описания полей

т.е. sqlite создает таблицу с единственным полем, имя которого
id INTEGER auto_increment P...EXT, email TEXT, trip TEXT, seek TEXT, extra TEXT
прямо так со всеми запятыми и пробелами

Ну и само собой, пользуйся удобными GUI для sqlite их много, там сразу все поймешь
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@chemdev
и как ты перепроверил? Думаешь, что столбец есть а компьютер тебя обманывает? CREATE TABLE IF NOT EXISTS не проверяет столбцы, только наличие таблицы.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
CREATE TABLE IF NOT EXISTS

Скипает таблицу если она уже существует. Удали таблицу и тогда этот DDL отработает успешно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы