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
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
0.Спасибо за токен.
1.Зачем вы создаете второе подключение к базе, не закрыв первое, и зачем тогда после этого снова используете первое? (подозреваю проблема именно в этом)
2.Ну вы же в курсе про подстановку значений, так зачем пихаете в код f-строки?
3.Как заметили в кометах, вы правда думаете, что не зная, как работать со структурами данных, уже готовы заниматься ботошлепством?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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