Как удалить строку в sqlite
Перейти к содержимому

Как удалить строку в sqlite

  • автор:

Как удалить строку в sqlite

Команда DELETE удаляет данные из БД. Она имеет следующий формальный синтаксис:

DELETE FROM имя_таблицы [WHERE условие_удаления]

Например, возьмем следующую таблицу products, которая хранит некоторый набор товаров:

CREATE TABLE products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, company TEXT NOT NULL, product_count INTEGER DEFAULT 0, price INTEGER ); INSERT INTO products (name, company, product_count, price) VALUES ('iPhone 13', 'Apple', 3, 76000), ('iPhone 12', 'Apple', 2, 51000), ('Galaxy S21', 'Samsung', 2, 56000), ('Galaxy S20', 'Samsung', 1, 41000), ('P40 Pro', 'Huawei', 5, 36000);

Удалим из этой таблицы товары, у которых производитель — Huawei:

DELETE FROM products WHERE company='Huawei';

Команда DELETE в SQLite

Или удалим все товары, производителем которых является Apple и которые имеют цену меньше 60000:

DELETE FROM products WHERE company='Apple' AND price < 60000;

Если необходимо вовсе удалить все строки вне зависимости от условия, то условие можно не указывать:

DELETE FROM products;

Удаление строки sqlite3

У меня есть таблица и две функции - для записи и удаление строки. Последняя не работает. Как её починить?

import sqlite3 connect = sqlite3.connect('filname.db', check_same_thread=False) cursor = connect.cursor() # cursor.execute('''CREATE TABLE users ('date', 'username', 'user_id')''') def add_user(date, username, user_id): cursor.execute('''INSERT INTO users VALUES (?, ?, ?)''', (date, username, user_id)) connect.commit() connect.close() def delete_user(user_id): # FIX IT cursor.execute('''DELETE FROM users WHERE user_id = ?''', (user_id)) connect.commit() connect.close() 

Отслеживать

51.6k 202 202 золотых знака 65 65 серебряных знаков 249 249 бронзовых знаков

Удаление записей из таблицы SQLite

Этот материал посвящен выполнению SQL-операции DELETE для SQLite-таблицы из Python-приложения.

В этой статье мы рассмотрим:

  • Удаление одной, нескольких или всех строк или колонок из SQLite-таблицы с помощью Python;
  • Использование запроса с параметрами для выполнения операции удаления из SQLite;
  • Коммит и отмена последней операции;
  • Массовое удаление в один запрос.

Подготовка

Перед выполнением следующих операций нужно знать название таблицы SQLite, а также ее колонок. В этом материале будет использоваться таблица sqlitedb_developers .

Пример удаления одной строки из SQLite-таблицы

Сейчас таблица sqlitedb_developers содержит шесть строк, а удалять будем разработчика, чей id равен 6. Вот что для этого нужно сделать:

  • Присоединиться к SQLite из Python;
  • Создать объект Cursor с помощью полученного в прошлом шаге объекта соединения SQLite;
  • Создать DELETE-запрос для SQLite. Именно на этом этапе нужно знать названия таблицы и колонок;
  • Выполнить DELETE-запрос с помощью cursor.execute() ;
  • После выполнения запроса необходимо закоммитить изменения в базу данных;
  • Закрыть соединение с базой данных;
  • Также важно не забыть перехватить исключения, которые могут возникнуть;
  • Наконец, проверить результат операции.
 
import sqlite3

def delete_record():
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")

sql_delete_query = """DELETE from sqlitedb_developers where /> cursor.execute(sql_delete_query)
sqlite_connection.commit()
print("Запись успешно удалена")
cursor.close()

except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")

delete_record()

Вывод: таблица sqlitedb_developers после удаления строки из Python.

Подключен к SQLite Запись успешно удалена Соединение с SQLite закрыто

Разбор примера в подробностях

  • На этой строке модуль sqlite3 импортируется в программу;
  • С помощью классов и методов sqlite3 можно взаимодействовать с базой данных SQLite.

sqlite3.connect() и connection.cursor() :

  • С помощью sqlite3.connect() устанавливается соединение с базой данных SQLite из Python;
  • Дальше используется sqliteConnection.cursor() для получения объекта Cursor .

После этого создается DELETE-запрос для удаления шестой строки в таблице (для разработчика с id равным 6). В запросе этот разработчик упоминается.

  • Выполняется операция из DELETE-запроса с помощью метода execute() объекта Cursor ;
  • После успешного удаления записи изменения коммитятся в базу данных с помощью connection.commit() .

Наконец, закрываются Cursor и SQLite-соединение в блоке finally .

Примечание: если выполняется несколько операций удаления, и есть необходимость отменить все изменения в случае неудачи хотя бы с одной из них, нужно использовать функцию rollback() класса соединения для отмены. Эту функцию стоит применять внутри блока except .

Использование переменных в запросах для удаления строки

В большинстве случаев удалять строки из таблицы SQLite нужно с помощью ключа, который передается уже во время работы программы. Например, когда пользователь удаляет свою подписку, запись о нем нужно удалить из таблицы.

В таких случаях требуется использовать запрос с параметрами. В таких запросах на месте будущих значений ставятся заполнители ( ? ). Это помогает удалять записи, получая значения во время работы программы, и избегать проблем SQL-инъекций. Вот пример с удалением разработчика с id=5 .

 
import sqlite3

def delete_sqlite_record(dev_id):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")

sql_update_query = """DELETE from sqlitedb_developers where /> cursor.execute(sql_update_query, (dev_id, ))
sqlite_connection.commit()
print("Запись успешно удалена")
cursor.close()

except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")

delete_sqlite_record(5)

Вывод: таблица sqlitedb_developers после удаления строки с помощью запроса с параметрами.

Подключен к SQLite Запись успешно удалена Соединение с SQLite закрыто

Разберем последний пример:

  • Запрос с параметрами использовался, чтобы получить id разработчика во время работы программы и подставить его на место ? . Он определяет id записи, которая будет удалена.
  • После этого создается кортеж данных с помощью переменных Python.
  • Дальше DELETE-запрос вместе с данными передается в метод cursor.execute() .
  • Наконец, изменения сохраняются в базе данных с помощью метода commit() класса Connection .

Операция Delete для удаления нескольких строк

В примере выше был использован метод execute() объекта Cursor для удаления одной записи, но часто приходится удалять сразу несколько одновременно.

Вместо выполнения запроса DELETE каждый раз для каждой записи, можно выполнить операцию массового удаления в одном запросе. Удалить несколько записей из SQLite-таблицы в один запрос можно с помощью метода cursor.executemany() .

Метод cursor.executemany(query, seq_param) принимает два аргумента: SQL-запрос и список записей для удаления.

Посмотрим на следующий пример. В нем удаляются сразу три разработчика.

 
import sqlite3

def delete_multiple_records(ids_list):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")

sqlite_update_query = """DELETE from sqlitedb_developers where /> cursor.executemany(sqlite_update_query, ids_list)
sqlite_connection.commit()
print("Удалено записей:", cursor.rowcount)
sqlite_connection.commit()
cursor.close()

except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")

ids_to_delete = [(4,),(3,)]
delete_multiple_records(ids_to_delete)
Подключен к SQLite далено записей: 2 Соединение с SQLite закрыто

Разберем последний пример:

  • После соединения с базой данных SQLite готовится SQL-запрос с параметрами и одним заполнителем. Вместе с ним также передается список id в формате кортежа.
  • Каждый элемент списка — это всего лишь кортеж каждой строки. Каждый кортеж содержит id разработчика. В этом примере три кортежа — то есть, три разработчика.
  • Дальше вызывается cursor.executemany(sqlite_delete_query, ids_list) для удаления нескольких записей из таблицы. И запрос, и список id передаются cursor.executemany() в качестве аргументов.
  • Чтобы увидеть количество затронутых записей, можно использовать метод cursor.rowcount . Наконец, изменения сохраняются в базу данных с помощью метода commit класса Connection .

Система управления базами данных SQLite. Изучаем язык запросов SQL и реляционные базы данных на примере библиотекой SQLite3. Курс для начинающих.

Часть 7.4: Команда DELETE в SQLite3. Оператор DELETE в SQLite

  • 04.06.2016
  • SQLite библиотека, Базы данных
  • 4 комментария

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. В этой заметки мы с тобой рассмотрим последний оператор из группы DML. Напомню, что ранее я уже писал про: оператор SELECT, команду INSERT и оператор UPDATE. Сейчас нам предстоит уделить время команде DELETE и ее реализации в библиотеке SQLite3. Из этой записи ты узнаешь: общий синтаксис команды DELETE в SQLite3 и увидишь несколько примеров использования команды DELETE в SQLite. Многие из начинающих часто путают команду DELETE с командой DROP. Напомню, что DROP удаляет объекты базы данных, а вот DELETE удаляет строки из таблиц в базе данных.

Часть 7.4: Команда DELETE в SQLite3. Оператор DELETE в SQLite

Часть 7.4: Команда DELETE в SQLite3. Оператор DELETE в SQLite

Синтаксис команды DELETE в SQLite3. Синтаксис оператора DELETE в SQLIte3

Рассмотрим последнюю команду из команд группы манипулирования данными в SQLite3. Команда DELETE в SQLite3 позволяет удалять строки. SQLite3 позволяет удалять строки как по одной, так и несколько строк, а можно удалить и все строки сразу из таблицы. Давайте посмотрим на синтаксис команды DELETE в SQLite3.

Синтаксис команды DELETE в SQLite3. Синтаксис оператора DELETE в SQLite

Синтаксис оператора DELETE в SQLite3 довольно прост: сначала указываем ключевое слово DELETE затем идет ключевое слово FROM, после которого указываем имя таблицы, из которой мы хотим удалить строку, а затем при помощи клаузулы WHERE мы указываем строки, которые хотим удалить при помощи команды DELETE.

Примеры использования команды DELETE в SQLite3. Примеры использования оператора DELETE в SQLite

Давайте рассмотрим несколько примеров использования команды DELETE в SQLite3. Будем использовать таблицу из прошлой части, в которой мы рассматривали команду UPDATE. Для начала мы удалим третью строку при помощи команды DELETE.

— Удалим третью строку при помощи команды DELETE

DELETE FROM table1 WHERE a = 3;

— Убедимся, что SQLite3 удалил третью строку

SELECT * FROM table1;

SQLite3 выдаст нам вот такую таблицу после использования команды DELETE:

1 Петров Русский 55

2 Нурутдинов Татарин 28

4 Горлукович Белорус 18

5 Сейтаридис Грек 48

6 Сейтаридис Грек 18

Бывают ситуации, когда нам необходимо удалить несколько строк из таблицы или мы не можем однозначно идентифицировать строку по одному столбцу. Поэтому чтобы удалить несколько строк из таблицы при помощи команды DELETE можно использовать сложные выражения после WHERE с применением различных SQL операторов. Давайте рассмотрим пример того, как удалить несколько строк из таблицы в SQLite3 при помощи DELETE.

— Удаляем несколько строк из таблицы при помощи команды DELETE

DELETE FROM table1 WHERE a = 5 OR a = 6;

— Проверим результат работы команды DELETE

SELECT * FROM table1;

Результат работы команды DELETE будет выглядеть так:

1 Петров Русский 55

2 Нурутдинов Татарин 28

4 Горлукович Белорус 18

Если нам необходимо удалить все строки из таблицы, то просто не стоит использовать клаузулу WHERE. Чтобы удалить все строки из таблицы при помощи команды DELETE в SQLite3 не используйте клаузулу WHERE:

— Удаляем все строки из таблицы при помощи команды DELETE в SQLite3

DELETE FROM table1;

Теперь после применения команды DELETE без клаузулы в таблице не будет ни одной строки. Мы рассмотрели работу оператор DELETE в SQLite3.

Еще записи о создании сайтов и их продвижении, базах данных, IT-технология и сетевых протоколах

  • Часть 6.3: Команда DROP в SQLite3. DDL оператор DROP в SQLite
  • Часть 7.3: Команда UPDATE в SQLIte3. Оператор UPDATE в SQLite
  • Часть 9.2: Команда COMMIT в базах данных SQLite (оператор COMMIT в SQLite3)
  • Часть 9.3: Команда ROLLBACK в базах данных SQLite (оператор ROLLBACK в SQLite3)
  • Часть 9.4: Команда SAVEPOINT в базах данных SQLite (оператор SAVEPOINT в SQLite3)
  • Часть 6.2: Команда ALTER в SQLite3. Оператор ALTER в SQLite3
  • Часть 7.1: Команда SELECT в SQLite3. Оператор SELECT в SQLite3
  • Часть 7.2: Команда INSERT в SQLite3. Оператор INSERT в SQLite3

Возможно, эти записи вам покажутся интересными

Related Posts

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. В…

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем рубрику реляционные базы данных и ее раздел библиотека SQLite. Начнем…

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Данная…

Выберете удобный для себя способ, чтобы оставить комментарий

This article has 4 comments

Олеся 04.06.2016 Reply

Кирилл, хочу сказать вам огромное спасибо за уже сделанную работу! У вас получается шикарно объяснять и разжевывать и SQL и теорию баз данных и саму SQLite3. Желаю вам творческих успехов, а на блог на ваш я давно подписана!

Кирилл 04.06.2016 Reply
Спасибо за отзыв!
gst80 22.08.2016 Reply
Если не ошибаюсь при условии «WHERE a = 5 AND a = 6» не должно ничего удалиться, я не прав?
Кирилл 22.08.2016 Reply

Да, конечно, моя невнимательность погубит меня! :)) Конечно же, оператор OR должен быть. Тогда обе строки будут удалены, спасибо, что указали на ошибку!

Добавить комментарий

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