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.