💀
Второй курс РПО
Основы проектирования баз данных
Основы проектирования баз данных
  • Понятия баз данных
  • Типы моделей данных
    • Реляционные базы данных
  • Реляционная алгебра
  • Модель процессов
  • Проектирование базы данных
  • Нормальные формы
    • Определения, и самое важное
  • Моделирование базы
    • Практическая работа: Решение
    • Для тех у кого iq как у Антона
  • Инструменты проектирования
  • Проектирование БД
  • Ключи и объекты
  • SQL Операции
  • Группировка данных
  • Пользовательский интерфейс
  • Проектирование БД
  • Управление таблицами
  • Ключи и индексы
  • Сортировка и поиск
    • 🤪Короткая версия
  • Работа с файлами
  • Запись массива в таблицу
  • Меню баз данных
  • Рабочие окна
  • Создание формы
  • Создание проекта БД и интерфейса
  • Ограничения полей
  • Работа с таблицами
  • Обработка транзакций
Powered by GitBook
On this page
  • Создание меню для работы с базами данных на Python и C++
  • Меню на Python
  • Меню на C++
  • Примеры команд и их объяснение

Меню баз данных

21.11.202

PreviousЗапись массива в таблицуNextРабочие окна

Last updated 6 months ago

Создание меню для работы с базами данных на Python и C++


Меню на Python

Подключение к базе данных

import sqlite3

conn = sqlite3.connect("database.db")  # Подключение или создание файла базы данных
cursor = conn.cursor()  # Создание курсора для выполнения SQL-запросов
  • sqlite3.connect("database.db") — открывает файл базы данных. Если файла не существует, он будет создан.

  • cursor() — создает объект для выполнения SQL-запросов, позволяя работать с данными.

Рекомендуется оборачивать подключение к базе в try...except, чтобы обрабатывать ошибки соединения.

Создание таблицы

cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
)
""")
conn.commit()  # Применение изменений
  • CREATE TABLE IF NOT EXISTS — команда SQL для создания таблицы только если она еще не существует.

  • PRIMARY KEY AUTOINCREMENT — создает уникальный идентификатор для каждой записи.

  • conn.commit() — сохраняет изменения в базе данных.

Применение conn.commit() необходимо после операций, изменяющих данные (например, INSERT, DELETE, UPDATE), чтобы изменения не потерялись.

Структура меню

def menu():
    print("1. Добавить запись")
    print("2. Удалить запись")
    print("3. Просмотреть записи")
    print("4. Выйти")
    
    choice = input("Выберите действие: ")
    return choice
  • print() — вывод текста.

  • input() — получает пользовательский ввод.

Обработка выбора

def handle_choice(choice):
    if choice == "1":
        add_record()
    elif choice == "2":
        delete_record()
    elif choice == "3":
        view_records()
    elif choice == "4":
        exit()
    else:
        print("Неверный выбор")
  • if/elif — проверяет, что выбрал пользователь, и вызывает соответствующую функцию.

  • exit() — завершает выполнение программы.


Подключение к базе данных

#include <iostream>
#include <sqlite3.h>

sqlite3* db;
if (sqlite3_open("database.db", &db) != SQLITE_OK) {
    std::cerr << "Ошибка подключения к базе данных" << std::endl;
}
  • sqlite3_open("database.db", &db) — открывает файл базы данных.

  • sqlite3 db* — указатель на объект базы данных, необходим для всех операций.

  • std::cerr — вывод сообщений об ошибках.

Проверка результата sqlite3_open важна, так как она позволяет убедиться, что соединение установлено.

Создание таблицы

const char* sql = 
    "CREATE TABLE IF NOT EXISTS users ("
    "id INTEGER PRIMARY KEY AUTOINCREMENT, "
    "name TEXT NOT NULL, "
    "age INTEGER);";

if (sqlite3_exec(db, sql, 0, 0, 0) != SQLITE_OK) {
    std::cerr << "Ошибка при создании таблицы" << std::endl;
}
  • sqlite3_exec() — выполняет SQL-запрос.

  • 0, 0, 0 — параметры для обратного вызова, которые не используются в данном случае.

Если возникает ошибка выполнения запроса, стоит выводить подробное описание через sqlite3_errmsg().

Структура меню

void showMenu() {
    std::cout << "1. Добавить запись" << std::endl;
    std::cout << "2. Удалить запись" << std::endl;
    std::cout << "3. Просмотреть записи" << std::endl;
    std::cout << "4. Выйти" << std::endl;
}
  • std::cout — вывод текста в консоль.

  • std::endl — перенос строки.

Обработка выбора

void handleChoice(int choice) {
    switch(choice) {
        case 1: addRecord(); break;
        case 2: deleteRecord(); break;
        case 3: viewRecords(); break;
        case 4: sqlite3_close(db); exit(0);
        default: std::cout << "Неверный выбор" << std::endl;
    }
}
  • switch/case — удобно использовать для обработки заранее известных вариантов выбора.

  • sqlite3_close(db) — закрывает соединение с базой данных.


Примеры команд и их объяснение

Добавление записи (Python)

def add_record():
    name = input("Введите имя: ")
    age = input("Введите возраст: ")

    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))
    conn.commit()
    print("Запись добавлена.")
  • INSERT INTO — добавляет новую строку в таблицу.

  • ? — используется для подстановки значений, чтобы избежать SQL-инъекций.


Добавление записи (C++)

void addRecord() {
    std::string name;
    int age;

    std::cout << "Введите имя: ";
    std::cin >> name;
    std::cout << "Введите возраст: ";
    std::cin >> age;

    std::string sql = "INSERT INTO users (name, age) VALUES ('" + name + "', " + std::to_string(age) + ");";
    if (sqlite3_exec(db, sql.c_str(), 0, 0, 0) != SQLITE_OK) {
        std::cerr << "Ошибка добавления записи" << std::endl;
    } else {
        std::cout << "Запись добавлена" << std::endl;
    }
}
  • std::cin — ввод данных.

  • std::to_string — преобразует число в строку.

  • .c_str() — преобразует строку C++ в формат C.

Справочник по командам - Python

Мини-справочник команд Python (SQLite)


1. sqlite3.connect(database)

  • Описание: Открывает или создает файл базы данных.

  • Пример: conn = sqlite3.connect("database.db")

  • Примечание: Возвращает объект подключения.


2. connection.cursor()

  • Описание: Создает курсор для выполнения SQL-запросов.

  • Пример: cursor = conn.cursor()

  • Примечание: Все SQL-команды выполняются через курсор.


3. cursor.execute(sql, params)

  • Описание: Выполняет SQL-запрос.

  • Пример:

    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Иван", 25))
  • Примечание: Используйте параметры (?) для защиты от SQL-инъекций.


4. connection.commit()

  • Описание: Сохраняет изменения в базе данных.

  • Пример: conn.commit()

  • Примечание: Необходимо вызывать после операций добавления, удаления или обновления данных.


5. cursor.fetchall()

  • Описание: Извлекает все строки из результата запроса.

  • Пример:

    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
  • Примечание: Возвращает список кортежей.


6. cursor.fetchone()

  • Описание: Извлекает одну строку из результата запроса.

  • Пример:

    row = cursor.fetchone()
  • Примечание: Удобно использовать для получения одного результата.


7. cursor.close()

  • Описание: Закрывает курсор.

  • Пример: cursor.close()

  • Примечание: Освобождает ресурсы, используемые курсором.


8. connection.close()

  • Описание: Закрывает подключение к базе данных.

  • Пример: conn.close()

  • Примечание: Всегда вызывайте при завершении работы с базой.


9. try...except

  • Описание: Обрабатывает ошибки при работе с базой.

  • Пример:

    try:
        conn = sqlite3.connect("database.db")
    except sqlite3.Error as e:
        print("Ошибка:", e)
  • Примечание: Используется для предотвращения сбоев программы.


10. input(prompt)

  • Описание: Получает ввод пользователя.

  • Пример:

    name = input("Введите имя: ")
  • Примечание: Возвращает строку, всегда проверяйте ввод.


11. print(text)

  • Описание: Выводит текст на экран.

  • Пример: print("Меню:")

  • Примечание: Используется для отображения интерфейса.


12. exit()

  • Описание: Завершает выполнение программы.

  • Пример: exit()

  • Примечание: Все соединения с базой должны быть закрыты перед вызовом.


13. if/elif/else

  • Описание: Условные конструкции для проверки значений.

  • Пример:

    if choice == "1":
        add_record()
    elif choice == "2":
        delete_record()
    else:
        print("Неверный выбор")
  • Примечание: Используется для обработки пользовательского ввода.

Справочник по командам - C++

Мини-справочник команд C++ (SQLite)


1. sqlite3_open(database, &db)

  • Описание: Открывает или создает файл базы данных.

  • Пример:

    cppКопировать кодsqlite3* db;
    if (sqlite3_open("database.db", &db) != SQLITE_OK) {
        std::cerr << "Ошибка подключения к базе данных" << std::endl;
    }
  • Примечание: Возвращает код ошибки, проверяйте его для обработки сбоев.


2. sqlite3_exec(db, sql, callback, arg, errmsg)

  • Описание: Выполняет SQL-запрос.

  • Пример:

    cppКопировать кодconst char* sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
    if (sqlite3_exec(db, sql, 0, 0, 0) != SQLITE_OK) {
        std::cerr << "Ошибка выполнения SQL-запроса" << std::endl;
    }
  • Примечание:

    • callback — указатель на функцию обратного вызова, можно использовать 0, если не требуется.

    • errmsg — сообщение об ошибке, передается как указатель.


3. sqlite3_close(db)

  • Описание: Закрывает соединение с базой данных.

  • Пример: sqlite3_close(db);

  • Примечание: Всегда вызывайте перед завершением программы.


4. std::cout

  • Описание: Выводит текст в консоль.

  • Пример:

    cppКопировать кодstd::cout << "Меню:" << std::endl;
  • Примечание: Используется для создания текстового интерфейса.


5. std::cin

  • Описание: Получает ввод от пользователя.

  • Пример:

    cppКопировать кодint choice;
    std::cin >> choice;
  • Примечание: Всегда проверяйте корректность ввода пользователя.


6. std::cerr

  • Описание: Выводит сообщения об ошибках.

  • Пример:

    cppКопировать кодstd::cerr << "Ошибка соединения с базой" << std::endl;
  • Примечание: Используйте для диагностики ошибок.


7. switch/case

  • Описание: Конструкция для обработки выбора пользователя.

  • Пример:

    cppКопировать кодswitch(choice) {
        case 1: addRecord(); break;
        case 2: deleteRecord(); break;
        case 3: viewRecords(); break;
        case 4: sqlite3_close(db); exit(0);
        default: std::cout << "Неверный выбор" << std::endl;
    }
  • Примечание: Удобно использовать для меню.


8. std::string

  • Описание: Строковый тип данных.

  • Пример:

    cppКопировать кодstd::string name;
    std::cin >> name;
  • Примечание: Используется для работы с текстовыми данными.


9. std::to_string(value)

  • Описание: Преобразует число в строку.

  • Пример:

    cppКопировать кодint age = 25;
    std::string ageStr = std::to_string(age);
  • Примечание: Удобно для формирования SQL-запросов.


10. .c_str()

  • Описание: Преобразует строку C++ в строку C.

  • Пример:

    cppКопировать кодconst char* sql = query.c_str();
  • Примечание: Используется для передачи строк в SQLite API.


11. exit(code)

  • Описание: Завершает выполнение программы.

  • Пример: exit(0);

  • Примечание: Перед вызовом завершите соединение с базой данных.


12. if/else

  • Описание: Условная конструкция для проверки значений.

  • Пример:

    cppКопировать кодif (sqlite3_open("database.db", &db) != SQLITE_OK) {
        std::cerr << "Ошибка подключения" << std::endl;
    }
  • Примечание: Используется для обработки ошибок и выбора действий.

Меню на C++