Как подключиться к базе данных SQLite в Python?

SQLite — это встраиваемая реляционная база данных, которая идеально подходит для небольших проектов и для тестирования. Она не требует настройки сервера и может использоваться «из коробки».

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

Установка SQLite и необходимых библиотек

Установка Python

Если у вас еще не установлен Python, вы можете скачать его с официального сайта python.org.

Установка SQLite

SQLite обычно предустановлен на большинстве систем. Для проверки, выполните следующую команду в терминале:

sqlite3 --version

Если SQLite не установлен, установите его с помощью менеджера пакетов вашей ОС. Например, для Ubuntu это будет:

sudo apt-get install sqlite3

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

Библиотека sqlite3 входит в стандартную библиотеку Python, поэтому нет необходимости устанавливать ее отдельно. Просто импортируйте ее в ваш код:

import sqlite3

Создание и управление базой данных SQLite

Создание новой базы данных

Создание новой базы данных в SQLite очень просто. Вот пример кода:

import sqlite3
from typing import Tuple

def create_database(db_name: str) -> sqlite3.Connection:
    """
    Создает новую базу данных или подключается к существующей.

    Args:
    db_name (str): Имя базы данных.

    Returns:
    sqlite3.Connection: Объект соединения с базой данных.
    """
    connection = sqlite3.connect(db_name)
    return connection

# Пример использования
conn = create_database('example.db')

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

Для создания таблиц в базе данных используется SQL-запрос CREATE TABLE. Рассмотрим пример:

from sqlite3 import Connection

def create_table(connection: Connection, table_schema: str) -> None:
    """
    Создает новую таблицу в базе данных.

    Args:
    connection (Connection): Объект соединения с базой данных.
    table_schema (str): SQL-запрос для создания таблицы.
    """
    cursor = connection.cursor()
    cursor.execute(table_schema)
    connection.commit()

# Пример использования
table_schema = """
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL
)
"""
create_table(conn, table_schema)

Вставка данных в таблицу

Для вставки данных в таблицу используем SQL-запрос INSERT INTO. Важно использовать параметризованные запросы для предотвращения SQL-инъекций.

from typing import Dict

def insert_data(connection: Connection, query: str, data: Dict) -> None:
    """
    Вставляет данные в таблицу.

    Args:
    connection (Connection): Объект соединения с базой данных.
    query (str): SQL-запрос для вставки данных.
    data (Dict): Словарь с данными для вставки.
    """
    cursor = connection.cursor()
    cursor.execute(query, data)
    connection.commit()

# Пример использования
insert_query = "INSERT INTO users (name, email) VALUES (:name, :email)"
user_data = {'name': 'Alice', 'email': 'alice@example.com'}
insert_data(conn, insert_query, user_data)

Чтение данных из базы данных

Выборка данных с помощью SELECT

Для выборки данных используется SQL-запрос SELECT. Рассмотрим варианты получения всех данных и ограниченного выбора.

from typing import List, Tuple

def select_all_users(connection: Connection) -> List[Tuple[int, str, str]]:
    """
    Возвращает всех пользователей из таблицы users.

    Args:
    connection (Connection): Объект соединения с базой данных.

    Returns:
    List[Tuple[int, str, str]]: Список пользователей.
    """
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM users")
    return cursor.fetchall()

# Пример использования
users = select_all_users(conn)
print(users)

Фильтрация данных

Для фильтрации данных используется ключевое слово WHERE. Рассмотрим примеры простых и сложных условий.

def select_user_by_email(connection: Connection, email: str) -> Tuple[int, str, str]:
    """
    Возвращает пользователя по его email.

    Args:
    connection (Connection): Объект соединения с базой данных.
    email (str): Email пользователя.

    Returns:
    Tuple[int, str, str]: Данные пользователя.
    """
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM users WHERE email = ?", (email,))
    return cursor.fetchone()

# Пример использования
user = select_user_by_email(conn, 'alice@example.com')
print(user)

Обновление и удаление данных в базе данных

Обновление записей

Для обновления данных используется SQL-запрос UPDATE. Нужно обязательно использовать WHERE, чтобы обновить нужные записи.

def update_user_email(connection: Connection, user_id: int, new_email: str) -> None:
    """
    Обновляет email пользователя по его ID.

    Args:
    connection (Connection): Объект соединения с базой данных.
    user_id (int): ID пользователя.
    new_email (str): Новый email пользователя.
    """
    cursor = connection.cursor()
    cursor.execute("UPDATE users SET email = ? WHERE id = ?", (new_email, user_id))
    connection.commit()

# Пример использования
update_user_email(conn, 1, 'new_email@example.com')

Удаление записей

Для удаления данных используется SQL-запрос DELETE. Здесь также важно использовать WHERE, чтобы удалить конкретные записи.

def delete_user(connection: Connection, user_id: int) -> None:
    """
    Удаляет пользователя по его ID.

    Args:
    connection (Connection): Объект соединения с базой данных.
    user_id (int): ID пользователя.
    """
    cursor = connection.cursor()
    cursor.execute("DELETE FROM users WHERE id = ?", (user_id,))
    connection.commit()

# Пример использования
delete_user(conn, 1)

Обработка ошибок и исключений

Работа с базой данных может сопровождаться различными ошибками. Рассмотрим примеры обработки исключений.

def safe_execute(connection: Connection, query: str, parameters: Tuple = ()) -> None:
    """
    Безопасно выполняет SQL-запрос с обработкой исключений.

    Args:
    connection (Connection): Объект соединения с базой данных.
    query (str): SQL-запрос.
    parameters (Tuple): Параметры для запроса.
    """
    try:
        cursor = connection.cursor()
        cursor.execute(query, parameters)
        connection.commit()
    except sqlite3.DatabaseError as e:
        print(f"Ошибка базы данных: {e}")

# Пример использования
query = "INSERT INTO users (name, email) VALUES (?, ?)"
parameters = ('Bob', 'bob@example.com')
safe_execute(conn, query, parameters)

Заключение

Мы рассмотрели основные операции с базой данных SQLite в Python, такие как создание, управление, чтение, обновление и удаление данных. SQLite — мощный инструмент для небольших проектов и тестирования, и его легко интегрировать с программами на Python.


    Добавить комментарий