Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

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

Код:
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) # чтобы бот работал постоянно
Дополнен 3 месяца назад
Ошибка:
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.
Голосование за лучший ответ
CausonQ Мудрец (13375) 3 месяца назад
 connect = sqlite3.connect('schedule.db', check_same_thread=False)  
Сделай так
Похожие вопросы