07. Менеджер данных (CRUD)
Менеджер данных (CRUD)
Описание: В этом уроке вы научитесь создавать программы, которые управляют данными — добавляют, читают, изменяют и удаляют записи (операции CRUD). Эти навыки используются в веб-сайтах, CRM-системах и любых приложениях, где есть база данных.1. Что такое CRUD
CRUD — это аббревиатура от четырёх основных операций с данными:- C — Create (создание записей)
- R — Read (чтение данных)
- U — Update (обновление записей)
- D — Delete (удаление)
2. Подготовка проекта
Создадим файл crud_manager.py и подключим модуль sqlite3.
import sqlite3def 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 logginglogging.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 tabulatecursor = conn.cursor()
cursor.execute('SELECT * FROM products')
rows = cursor.fetchall()
print(tabulate(rows, headers=['ID', 'Название', 'Цена', 'Кол-во']))
Установите библиотеку:
pip install tabulate
Итоги урока
Теперь вы умеете:- Создавать базу данных SQLite для хранения данных.
- Реализовывать все CRUD-операции на Python.
- Создавать простые консольные интерфейсы для управления данными.
- Добавлять логирование и улучшать визуализацию вывода.