Top.Mail.Ru
Ответы
Аватар пользователя
10мес
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Создание бота телеграмм на языке программирования Python с использованием базы данных

Я пытаюсь создать бота для составления расписания, но постоянно сталкиваюсь с ошибкой, и не могу понять, как её исправить.

Код:
import telebot
import webbrowser
from telebot import types
import sqlite3

bot = telebot.TeleBot(token='***') # связь кода с ботом

# подключение к базе данных
connect = sqlite3.connect('schedule.db')
cursor = connect.cursor()


@bot.message_handler(commands=['start'])
def start(message):
# создание кнопок
markup = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton('3ПИ', callback_data='3pi')
btn2 = types.InlineKeyboardButton('3ПМ', callback_data='3pm')
markup.row(btn1, btn2)
# приветствие пользователя и определение группы
bot.send_message(message.chat.id, f'Привет, {message.from_user.first_name}, я бот, который поможет узнать тебе твоё расписание на эту неделю!')
bot.send_message(message.chat.id, 'Для начала выбери свою группу:', reply_markup=markup)


@bot.callback_query_handler(func=lambda callback: True)
def callback(callback):
# определение числителя и знаменателя
r = 1

# вывод расписания для прикладной информатики
if callback.data == '3pi':
bot.delete_message(callback.message.chat.id, callback.message.message_id)
bot.send_message(callback.message.chat.id, 'Отлично, вот твоё расписание на эту неделю, пишка')

cursor.execute('SELECT * FROM ScheduleTESTai')
res = cursor.fetchall() # кладём в res сразу целую строку, через for двигаемся по строкам вниз

# вывод расписания на текущую неделю
i = 1
mess = ""
day_copy = ""
for row in res:
if row[1] == r:
room = row[2]
typ = row[3]
subject = row[4]
teacher = row[5]
time = row[6]
day = row[7]
if day_copy != day:
mess += f"{day}:\n"
day_copy = day
i = 1
mess += f"{i}) ауд. {room} | {typ} {subject} | {teacher} | {time}\n"
i += 1
bot.send_message(callback.message.chat.id, mess)

# вывод расписания для прикладной математики
elif callback.data == '3pm':
bot.delete_message(callback.message.chat.id, callback.message.message_id)
bot.send_message(callback.message.chat.id, 'Отлично, вот твоё расписание на эту неделю, мишка')

cursor.execute('SELECT * FROM ScheduleTESTam')
res = cursor.fetchall() # кладём в res сразу целую строку, через for двигаемся по строкам вниз

# вывод расписания на текущую неделю
i = 1
mess = ""
day_copy = ""
for row in res:
if row[1] == r:
room = row[2]
typ = row[3]
subject = row[4]
teacher = row[5]
time = row[6]
day = row[7]
if day_copy != day:
mess += f"{day}:\n"
day_copy = day
i = 1
mess += f"{i}) ауд. {room} | {typ} {subject} | {teacher} | {time}\n"
i += 1
bot.send_message(callback.message.chat.id, mess)


connect.close()

bot.polling(none_stop=True) # чтобы бот работал постоянно

Дополнен

Ошибка:
Traceback (most recent call last):
File "C:\Users\steam\Desktop\pythonProject\create_bot.py", line 89, in <module>
bot.polling(none_stop=True) # чтобы бот работал постоянно
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\steam\Desktop\pythonProject\.venv\Lib\site-packages\telebot\__init__.py", line 1189, in polling
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\steam\Desktop\pythonProject\.venv\Lib\site-packages\telebot\__init__.py", line 1264, in __threaded_polling
raise e
File "C:\Users\steam\Desktop\pythonProject\.venv\Lib\site-packages\telebot\__init__.py", line 1226, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\steam\Desktop\pythonProject\.venv\Lib\site-packages\telebot\util.py", line 150, in raise_exceptions
raise self.exception_info
File "C:\Users\steam\Desktop\pythonProject\.venv\Lib\site-packages\telebot\util.py", line 93, in run
task(*args, **kwargs)
File "C:\Users\steam\Desktop\pythonProject\.venv\Lib\site-packages\telebot\__init__.py", line 8822, in _run_middlewares_and_handler
result = handler['function'](message)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\steam\Desktop\pythonProject\create_bot.py", line 35, in callback
cursor.execute('SELECT * FROM ScheduleTESTai')
sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 19520 and this is thread id 3300.

По дате
По рейтингу
Аватар пользователя
Мудрец
10мес
1
 connect = sqlite3.connect('schedule.db', check_same_thread=False)  

Сделай так