tada_no_net
@tada_no_net

Sqlite3.OperationalError: no such table: per?

#Импоритрование библиотек
import telebot
import sqlite3

#Токен
bot = telebot.TeleBot('токен')


#База данных
base = sqlite3.connect('base.db', check_same_thread=False)
curbase = base.cursor()
curbase.execute("""CREATE TABLE IF NOT EXISTS base(
id INT,
ind INT,
selo TEXT,
adres TEXT,
name TEXT,
phone INT
)""")
base.commit()

#Личная переменная
per = sqlite3.connect('per.db', check_same_thread=False)
curper = per.cursor()
curper.execute("""CREATE TABLE IF NOT EXISTS per(
id INT,
per INT
)""")
per.commit()

#Выбор языка
@bot.message_handler(commands=['start'])
def start_message(message):
        bot.send_message(message.chat.id, 'Choose language. Type: "RU" or "KZ" ')

        ''''try:
                curper.execute(
                        f'SELECT id FROM per WHERE id = {message.chat.id}')
                data_per = curper.fetchone()
                if data_per is None:
                        curbase.execute("INSERT INTO per VALUES(?, ?);",
                                         (int(message.chat.id), 0))
                        per.commit()
                else:
                        for value in curper.execute("SELECT * FROM per"):
                                print(value)
        except Exception as value:
                bot.send_message(message.chat.id, f'Ошибка добавления id в БД: {value}')'''

        #Изменение личн переменной на 0
        try:
                curper.execute(
                        "UPDATE per SET per = ? WHERE id = ?",
                        (0, message.chat.id))
        except Exception as value:
                bot.send_message(message.chat.id, f'Ошибка при изменении личной переменной: {value}')

        #Добавление id
        try:
                curbase.execute(
                        f'SELECT id FROM base WHERE id = {message.chat.id}')
                data_base = curbase.fetchone()
                if data_base is None:
                        curbase.execute("INSERT INTO base VALUES(?, ?, ?, ?, ?, ?);",
                                         (message.chat.id, 0, '0', '0', '0', 0))
                        base.commit()
                else:
                        for value in curbase.execute("SELECT * FROM base"):
                                print(value)
        except Exception as value:
                bot.send_message(message.chat.id, f'Ошибка добавления id в БД: {value}')


#Прием информации
@bot.message_handler(content_types=['text'])
def send_text(message):

        #Взятие переменной
        rows = curper.execute("SELECT per FROM per WHERE id = ?", (message.chat.id,),).fetchall()
        rows = str(rows)
        row = rows.replace('[(', '')
        row = row.replace(',)]', '')
        '''row = int(row)'''
        print(row)

        #Глобализирование переменных
        global index
        global selo
        global adres
        global name
        global phone

        #Изменение переменной
        def izmper(peremenn):
                try:
                        curper.execute(
                                "UPDATE per SET per = ? WHERE id = ?",
                                (peremenn, message.chat.id)
                        )
                except Exception as value:
                        bot.send_message(message.chat.id, f'Ошибка при изменении личной переменной: {value}')

        #Приветсвие RU
        if message.text.lower() == 'ru':
                bot.send_message(message.chat.id, 'Здравствуйте, я помогу вам заполнить данные о вашей школе для получения энциклопедии')
                bot.send_message(message.chat.id, 'Давайте начнем. Введите индекс вашей школы (пример: 050046): ')
                izmper(1)

        #Приветствие KZ
        elif message.text.lower() == 'kz':
                bot.send_message(message.chat.id, 'Сәлеметсіз бе, энциклопедия алу үшін сізге мектебіңіз туралы мәліметтерді толтыруға көмектесемін')
                bot.send_message(message.chat.id, 'Бастайық. Мектебіңіздің пошта индексін енгізіңіз (мысалы: 050046):')
                izmper(11)

#Русский

#Приём адреса школы

        #Индекс
        elif row == 1 and len(message.text) == 6:
                try:
                        curbase.execute(
                                "UPDATE base SET ind = ? WHERE id = ?",
                                (int(message.text), message.chat.id))
                except Exception as value:
                        bot.send_message(message.chat.id, f'Ошибка при добавлении в бд: {value}')
                bot.send_message(message.chat.id, 'Отлично! Теперь введите название вашего села (пример: Село Узынагаш):')
                izmper(2)

        #Неправильный индекс
        elif row == 1 and len(message.text) != 6 and message.text.lower() != 'kz' and message.text.lower() != 'ru':
                bot.send_message(message.chat.id, 'С индексом что то не так. Попробуйте ещё раз')

        #Прием села
        elif row == 2:
                try:
                        curbase.execute(
                                "UPDATE base SET selo = ? WHERE id = ?",
                                (message.text, message.chat.id))
                except Exception as value:
                        bot.send_message(message.chat.id, f'Ошибка при добавлении в бд: {value}')
                bot.send_message(message.chat.id, 'Отлично! Теперь введите улицу и дом (пример: Улица Гагарина дом 111):')
                izmper(3)

        #Неправильное село
        elif row == 2 and message.text.lower()[0:4] != 'село':
                bot.send_message(message.chat.id, 'С названием села что то не так. Попробуйте ещё раз')

        #Прием улицы и дома
        elif row == 3 and 'улица' in message.text.lower():
                try:
                        curbase.execute(
                                "UPDATE base SET adres = ? WHERE id = ?",
                                (message.text, message.chat.id))
                except Exception as value:
                        bot.send_message(message.chat.id, f'Ошибка при добавлении в бд: {value}')
                bot.send_message(message.chat.id, 'Отлично! Теперь введите ФИО ответственного лица:')
                izmper(4)

        #Неправильная улица
        elif row == 3 and message.text.lower()[0:5] != 'улица':
                bot.send_message(message.chat.id, 'С названием улицы что то не так. Попробуйте ещё раз')

        #Прием ФИО
        elif row == 4:
                try:
                        curbase.execute(
                                "UPDATE base SET name = ? WHERE id = ?",
                                (message.text, message.chat.id))
                except Exception as value:
                        bot.send_message(message.chat.id, f'Ошибка при добавлении в бд: {value}')
                bot.send_message(message.chat.id, 'Отлично! Теперь введите номер телефона привязанный к Whatsapp:')
                izmper(5)

        #Прием телефона
        elif row == 5:
                try:
                        curbase.execute(
                                "UPDATE base SET phone = ? WHERE id = ?",
                                (int(message.text), message.chat.id))
                except Exception as value:
                        bot.send_message(message.chat.id, f'Ошибка при добавлении в бд: {value}')
                bot.send_message(message.chat.id, 'Отлично! Я все записал.')
                izmper(0)


        #Вывод БД
        elif message.text == '/list':
                for value in curbase.execute("SELECT * FROM per"):
                        bot.send_message(message.chat.id, f'{value}\n')


#Зацикливание
bot.polling()


Помогите пожалуйста выводит такую ошибку:
File "C:\Users\Kirukato\PycharmProjects\school_bot\main.py", line 189, in send_text
for value in curbase.execute("SELECT * FROM per"):
sqlite3.OperationalError: no such table: per
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
0.Спасибо за токен.
1.Зачем вы создаете второе подключение к базе, не закрыв первое, и зачем тогда после этого снова используете первое? (подозреваю проблема именно в этом)
2.Ну вы же в курсе про подстановку значений, так зачем пихаете в код f-строки?
3.Как заметили в кометах, вы правда думаете, что не зная, как работать со структурами данных, уже готовы заниматься ботошлепством?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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