Как удалить данные из таблицы 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,)) # не работает |
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,))
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для удаления данных из таблицы в SQLite с использованием библиотеки pysqlite3 в Python, необходимо выполнить следующие шаги:
1. Установите библиотеку pysqlite3, если она еще не установлена. Вы можете установить ее с помощью pip:
pip install pysqlite3
2. Подключитесь к базе данных SQLite с помощью метода connect() и создайте объект курсора:
import sqlite3 conn = sqlite3.connect('database.db') cursor = conn.cursor()
3. Выполните SQL-запрос для удаления данных из таблицы. Например, если у вас есть таблица "users" и вы хотите удалить всех пользователей, у которых возраст больше 30:
sql = "DELETE FROM users WHERE age > 30" cursor.execute(sql)
4. Подтвердите изменения в базе данных с помощью метода commit():
conn.commit()
5. Закройте соединение с базой данных:
conn.close()
Таким образом, данные из таблицы будут удалены. Убедитесь, что вы выполняете запросы безопасно и обрабатываете исключения, чтобы избежать ошибок при удалении данных.