Продолжаем цикл статей по работе с SQLite в Python. Работая с SQLite python выборка и удаление данных являются чуть ли не самым часто используемым запросом. В целом алгоритм работы у нас не будет сильно отличаться, но если вы не читали предыдущие статьи, то настоятельно рекомендую их почитать.
Выборка данных
И так, для того, что бы осуществить запрос в базу данных, нам для начала необходимо выполнить действия по подключению к БД. Все действия описаны а предыдущих публикациях, ниже описан краткий алгоритм действий:
- Устанавливаем соединение с SQLite
- Создаем объект cursor
- Выполняем запрос SELECT
- Вызываем метод объекта cursor, fetchall() для получения данных
- Наводим курсор на строку, и обрабатываем
Для примера, мы будем работать с ранее созданной таблицей tasks.
Сначала создаем подключение к нашей базе. Описывать что значит тот или иной код, тут я уже не буду, так как это все мы описывали в предыдущих публикациях.
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
except Error as e:
print(e)
return conn
Подключение к базе у нас есть, теперь нам необходимо создать функцию, которая выбирает все строки из таблицы tasks и отображает эти данные.
def select_all_tasks(conn):
cur = conn.cursor()
cur.execute("SELECT * FROM tasks")
rows = cur.fetchall()
for row in rows:
print(row)
Мы создали функцию select_all_tasks(), внутри нее мы создали объект cursor, и используя метод execute выполнили запрос SELECT. Затем мы вызываем метод fetchall() для получения данных из нашей таблицы. Окей, мы подключились к нашей базе, и даже прочитали все что есть в интересующей нас таблице. Как вы можете помнить, в нашей таблице есть поле, где можно задавать приоритет той или иной задачи, поэтому сейчас мы сделаем выборку по полю приоритета.
def select_task_by_priority(conn, priority):
cur = conn.cursor()
cur.execute("SELECT * FROM tasks WHERE priority=?", (priority,))
rows = cur.fetchall()
for row in rows:
print(row)
Мы создали функцию select_task_by_priority(), внутри которой мы выполняем запрос по полю приоритет. Если говорить простыми словами, то вместо знака (?) мы подставляем цифру приоритета, а метод fetchall() позволяет нам после этого, все это дело вывести на просмотр. Завершающим этапом является функция main() о ней мы так же говорили в предыдущих публикациях.
def main():
database = r"C:\sqlite\db\pythonsqlite.db"
conn = create_connection(database)
with conn:
print("1. Query task by priority:")
select_task_by_priority(conn, 1)
print("2. Query all tasks")
select_all_tasks(conn)
Попробуйте самостоятельно изучить этот кусок кода, думаю вам не сложно будет понять, как тут все устроено. Ниже привожу весь листинг кода:
import sqlite3
from sqlite3 import Error
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
except Error as e:
print(e)
return conn
def select_all_tasks(conn):
cur = conn.cursor()
cur.execute("SELECT * FROM tasks")
rows = cur.fetchall()
for row in rows:
print(row)
def select_task_by_priority(conn, priority):
cur = conn.cursor()
cur.execute("SELECT * FROM tasks WHERE priority=?", (priority,))
rows = cur.fetchall()
for row in rows:
print(row)
def main():
database = r"C:\sqlite\db\pythonsqlite.db"
conn = create_connection(database)
with conn:
print("1. Query task by priority:")
select_task_by_priority(conn, 1)
print("2. Query all tasks")
select_all_tasks(conn)
if __name__ == '__main__':
main()
SQLite python удаление данных
Мы прошли уже довольно большой путь, и надеюсь вы уже уловили основы работы с SQLite в Python. На очереди у нас удаление данных. Для того, что бы удалить данные из SQlite средствами Python, нам необходимо выполнить знакомые нам уже действия, с той лишь разницей, что сам запрос только будет немного другой.
- Устанавливаем соединение с базой
- Создаем Cursor
- Выполняем запрос DELETE
Так как, процесс удаления отличается только двумя функциями, я приведу сначала весь листинг кода, а затем разберем эти две функции.
import sqlite3
from sqlite3 import Error
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
except Error as e:
print(e)
return conn
def delete_task(conn, id):
sql = 'DELETE FROM tasks WHERE id=?'
cur = conn.cursor()
cur.execute(sql, (id,))
conn.commit()
def delete_all_tasks(conn):
sql = 'DELETE FROM tasks'
cur = conn.cursor()
cur.execute(sql)
conn.commit()
def main():
database = r"C:\sqlite\db\pythonsqlite.db"
conn = create_connection(database)
with conn:
delete_task(conn, 2);
# delete_all_tasks(conn);
if __name__ == '__main__':
main()
И так, две наши функции, это delete_task(), и delete_all_tasks(). Думаю по названию вам понятно, для чего они предназначены. В функции delete_task() удаление происходит довольным простым образом, мы просто передаем id удаляемой строки, а в случае с delete_all_tasks(), мы удаляем все строки, которые у нас есть в этой таблице. Так же, хочу обратить ваше внимание на то, что в функции main(), вы можете закомментировать ту или иную функцию, для тестирования. В данном случае, закомментирована функции delete_all_tasks(), соответственно у нас удаляется только строка с id 2.
Подведем итоги. Мы с вами разобрали процесс создания базы данных SQLite, создание таблиц в SQLite, добавление/обновление/удаление/выборка данных, средствами приложений созданных на Python. Конечно же, все тоже самое можно сделать и по другому, но на этом ресурсе мы обсуждаем и учимся Python, поэтому все было показано именно так. Не забываем использовать SQLiteStudio.