07. Менеджер данных (CRUD)

Менеджер данных (CRUD)

Описание: В этом уроке вы научитесь создавать программы, которые управляют данными — добавляют, читают, изменяют и удаляют записи (операции CRUD). Эти навыки используются в веб-сайтах, CRM-системах и любых приложениях, где есть база данных.

1. Что такое CRUD

CRUD — это аббревиатура от четырёх основных операций с данными:
  • C — Create (создание записей)
  • R — Read (чтение данных)
  • U — Update (обновление записей)
  • D — Delete (удаление)
Каждое приложение, работающее с данными, использует эти принципы — от баз данных до API.

2. Подготовка проекта

Создадим файл crud_manager.py и подключим модуль sqlite3.

import sqlite3

def init_db(): conn = sqlite3.connect('products.db') cur = conn.cursor() cur.execute('''CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, price REAL, quantity INTEGER )''') conn.commit() return conn

Теперь у нас есть таблица товаров с полями: id, name, price, quantity.

3. Добавление данных (Create)

Добавим первую функцию для создания записей.

def add_product(conn, name, price, quantity):
    cur = conn.cursor()
    cur.execute('INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)', (name, price, quantity))
    conn.commit()
    print(f' Добавлен товар: {name}')

Пример использования:


conn = init_db()
add_product(conn, 'Ноутбук', 1200.0, 5)
add_product(conn, 'Монитор', 300.0, 10)

4. Чтение данных (Read)

Теперь добавим возможность просматривать данные.

def list_products(conn):
    cur = conn.cursor()
    cur.execute('SELECT * FROM products')
    rows = cur.fetchall()
    print('--- Список товаров ---')
    for r in rows:
        print(f'ID: {r[0]} | {r[1]} — {r[2]} $ ({r[3]} шт.)')

list_products(conn)

5. Обновление данных (Update)

Редактируем цену и количество товара:

def update_product(conn, product_id, price=None, quantity=None):
    cur = conn.cursor()
    if price is not None:
        cur.execute('UPDATE products SET price = ? WHERE id = ?', (price, product_id))
    if quantity is not None:
        cur.execute('UPDATE products SET quantity = ? WHERE id = ?', (quantity, product_id))
    conn.commit()
    print(f' Товар с ID={product_id} обновлён!')

Пример:


update_product(conn, 1, price=1100.0)

6. Удаление данных (Delete)

Удалим запись по её ID:

def delete_product(conn, product_id):
    cur = conn.cursor()
    cur.execute('DELETE FROM products WHERE id = ?', (product_id,))
    conn.commit()
    print(f' Товар с ID={product_id} удалён.')

Пример:


delete_product(conn, 2)

7. Добавим поиск по имени


def search_product(conn, keyword):
    cur = conn.cursor()
    cur.execute('SELECT * FROM products WHERE name LIKE ?', (f'%{keyword}%',))
    rows = cur.fetchall()
    print(' Результаты поиска:')
    for r in rows:
        print(f'{r[1]} — {r[2]} $, {r[3]} шт.')

search_product(conn, 'ноут')

8. Улучшаем вывод и структуру

Чтобы сделать интерфейс программы удобнее, добавим меню управления:

def main():
    conn = init_db()
    while True:
        print('\n[1] Показать товары')
        print('[2] Добавить товар')
        print('[3] Изменить цену или количество')
        print('[4] Удалить товар')
        print('[5] Найти товар')
        print('[0] Выход')
        choice = input('Выберите действие: ')

if choice == '1': list_products(conn) elif choice == '2': name = input('Название: ') price = float(input('Цена: ')) qty = int(input('Количество: ')) add_product(conn, name, price, qty) elif choice == '3': pid = int(input('ID товара: ')) price = float(input('Новая цена: ')) update_product(conn, pid, price=price) elif choice == '4': pid = int(input('ID товара: ')) delete_product(conn, pid) elif choice == '5': key = input('Введите часть названия: ') search_product(conn, key) elif choice == '0': print('Выход из программы. До свидания!') break else: print('Неверный выбор, попробуйте снова.')

if __name__ == '__main__': main()

Теперь вы создали полноценный текстовый менеджер данных — базовый аналог системы управления товарами!

9. Добавим автоматическое логирование

Для отслеживания действий можно подключить logging:

import logging

logging.basicConfig(filename='crud.log', level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s') logging.info('Программа запущена')

Добавьте строку `logging.info('Товар добавлен')` в функции `add_product()` и `update_product()`, чтобы фиксировать изменения.

10. Улучшение UX — вывод таблицей

Можно оформить результат красиво:

from tabulate import tabulate

cursor = conn.cursor() cursor.execute('SELECT * FROM products') rows = cursor.fetchall() print(tabulate(rows, headers=['ID', 'Название', 'Цена', 'Кол-во']))

Установите библиотеку:


pip install tabulate

Итоги урока

Теперь вы умеете:
  • Создавать базу данных SQLite для хранения данных.
  • Реализовывать все CRUD-операции на Python.
  • Создавать простые консольные интерфейсы для управления данными.
  • Добавлять логирование и улучшать визуализацию вывода.