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

Ссылка скопирована
1 ответ

Использую питон и 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,)) # не работает

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")

... @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")

Дополнительно:

Ответы:

Когда ты делаешь with self.connection, ты создаёшь транзакцию БД - т.е. связный набор операций, которые будут либо все вместе применены, либо все вместе отвергнуты. Так как у тебя только одна операция каждый раз, это не имеет смысла.
А вот курсор у тебя используется один и тот же, вне транзакции. Это не дело. Лучше создавай его заново внутри метода.

  • убрал with self.connection и вообще перестало работать

Может, вы как-то с кавычками разберетесь все-таки? Если не понимаете, зачем они нужны, не стоит ставить их где попало и какие попало.

return self.cursor.execute("DELETE FROM queue WHERE chat_id = ?", (chat_id,))

return self.cursor.execute("DELETE FROM queue WHERE chat_id = ?", (chat_id,))

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Никита Орлов Ответ

Для удаления данных из таблицы в SQLite с использованием библиотеки pysqlite3 в Python, необходимо выполнить следующие шаги:

1. Установите библиотеку pysqlite3, если она еще не установлена. Вы можете установить ее с помощью pip:

pip install pysqlite3

pip install pysqlite3

2. Подключитесь к базе данных SQLite с помощью метода connect() и создайте объект курсора:

import sqlite3
 
conn = sqlite3.connect('database.db')
cursor = conn.cursor()

import sqlite3 conn = sqlite3.connect('database.db') cursor = conn.cursor()

3. Выполните SQL-запрос для удаления данных из таблицы. Например, если у вас есть таблица "users" и вы хотите удалить всех пользователей, у которых возраст больше 30:

sql = "DELETE FROM users WHERE age > 30"
cursor.execute(sql)

sql = "DELETE FROM users WHERE age > 30" cursor.execute(sql)

4. Подтвердите изменения в базе данных с помощью метода commit():

conn.commit()

conn.commit()

5. Закройте соединение с базой данных:

conn.close()

conn.close()

Таким образом, данные из таблицы будут удалены. Убедитесь, что вы выполняете запросы безопасно и обрабатываете исключения, чтобы избежать ошибок при удалении данных.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно