Документация по Python. Теоретические материалы, и практические задачи

SQLite Python выборка и удаление

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

Выборка данных

И так, для того, что бы осуществить запрос в базу данных, нам для начала необходимо выполнить действия по подключению к БД. Все действия описаны а предыдущих публикациях, ниже описан краткий алгоритм действий:

  1. Устанавливаем соединение с SQLite
  2. Создаем объект cursor
  3. Выполняем запрос SELECT
  4. Вызываем метод объекта cursor, fetchall() для получения данных
  5. Наводим курсор на строку, и обрабатываем

Для примера, мы будем работать с ранее созданной таблицей 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, нам необходимо выполнить знакомые нам уже действия, с той лишь разницей, что сам запрос только будет немного другой.

  1. Устанавливаем соединение с базой
  2. Создаем Cursor
  3. Выполняем запрос 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.

Оставьте комментарий

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