dolphin23
@dolphin23
Новичок в программировании

Как удалить данные из таблицы pysqlite3?

Использую питон и pysqlite3, хочу удалить пользователя по его chat id, код:

Database.py:
import sqlite3

class Database:
    def __init__(self, database_file):
        self.connection = sqlite3.connect(database_file, check_same_thread = False)
        self.cursor = self.connection.cursor()

    def add_queue(self, chat_id):
        with self.connection:
            return self.cursor.execute("INSERT INTO 'queue' ('chat_id') VALUES (?)", (chat_id,))

    def delete_queue(self, chat_id):
        with self.connection:
            return self.cursor.execute("DELETE FROM 'queue' WHERE 'chat_id' = ?", (chat_id,)) # не работает

Main.py:
...
@bot.message_handler(content_types = ['text'])
def bot_message(message):
    if message.chat.type == "private":
        if message.text == "Поиск собеседника":
            markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
            item1 = types.KeyboardButton("❌Остановить поиск")
            markup.add(item1)

            db.add_queue(message.chat.id)

            bot.send_message(message.chat.id, " Поиск собеседника", reply_markup = markup)

        elif message.text == "❌Остановить поиск":
            db.delete_queue(message.chat.id) # доходит до этой строки однако из базы данных ничего не удаляет
            bot.send_message(message.chat.id, "❌Поиск остановлен, напишите /menu")
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
Когда ты делаешь with self.connection, ты создаёшь транзакцию БД - т.е. связный набор операций, которые будут либо все вместе применены, либо все вместе отвергнуты. Так как у тебя только одна операция каждый раз, это не имеет смысла.
А вот курсор у тебя используется один и тот же, вне транзакции. Это не дело. Лучше создавай его заново внутри метода.
Ответ написан
@galaxy
Может, вы как-то с кавычками разберетесь все-таки? Если не понимаете, зачем они нужны, не стоит ставить их где попало и какие попало.
return self.cursor.execute("DELETE FROM queue WHERE chat_id = ?", (chat_id,))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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