Сделал базу данных для телеграм бота и постоянно выдаёт ошибку, что делать?

Вот код:
import telebot
import sqlite3


bot = telebot.TeleBot("2094994681:AAGCllfBnfytGnLLSrEd49kAfLOCSOaeucE")

conn = sqlite3.connect('db/database.db', check_same_thread=False)
cursor = conn.cursor()


def db_table_val(user_id: int, user_name: str, user_surname: str, username: str):
    cursor.execute('INSERT INTO test (user_id, user_name, user_surname, username) VALUES (?, ?, ?, ?)', (user_id, user_name, user_surname, username))
    conn.commit()


@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, 'Добро пожаловать')


@bot.message_handler(content_types=['text'])
def get_text_messages(message):
    if message.text.lower() == 'привет':
        bot.send_message(message.chat.id, 'Привет! Ваше имя добавлено в базу данных!')

        us_id = message.from_user.id
        us_name = message.from_user.first_name
        us_sname = message.from_user.last_name
        username = message.from_user.username

        db_table_val(user_id=us_id, user_name=us_name, user_surname=us_sname, username=username)


bot.polling(none_stop=True)

Ошибка:
cursor.execute('INSERT INTO test (user_id, user_name, user_surname, username) VALUES (?, ?, ?, ?)', (user_id, user_name, user_surname, username))
sqlite3.OperationalError: no such table: test
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
Zoominger
@Zoominger Куратор тега Python
System Integrator
Вам же пишут:
no such table: test
У вас нет таблицы с названием "test".
Создайте её хотя бы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@zlo1
Каждое сообщение обрабатывается в отдельном потоке, т.е. подключение (connect) должны делать в каждом обработчике @bot.message_handler

для sqlite еще потребуется семафоры (fcntl.flock), т.к локальная СУБД плохо "разруливает" блокировки

lock_bd=open(os.path.join(os.path.dirname(os.path.realpath(__file__)),'db','database.lock'),'a')
fcntl.flock(lock_bd,fcntl.LOCK_EX)
conn = sqlite3.connect('db/database.db', check_same_thread=False)
cursor = conn.cursor()
....

cursor.close()
conn.close()
lock_bd.close()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы