Как работать с SQLite в Python?

онлайн тренажер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

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

Работа с базами данных — важный аспект практически любого современного приложения. Однако далеко не всегда необходимы сложные и тяжёлые СУБД вроде MySQL или PostgreSQL. Для небольших проектов, прототипов или локальных приложений отлично подходит встроенная в Python система управления базами данных — SQLite.

В этом руководстве мы подробно разберём, как работать с SQLite в Python, как выполнять основные операции (создание, вставка, обновление, удаление данных), и рассмотрим полезные примеры. Также вы узнаете, как использовать команду UPDATE в SQLite с помощью Python.


Что такое SQLite и почему её стоит использовать?

SQLite — это легковесная встроенная реляционная база данных, которая не требует отдельного сервера. База данных хранится прямо в одном файле на диске.

📌 Преимущества SQLite:

  • Встроена в стандартную библиотеку Python (sqlite3).

  • Не требует установки и настройки сервера.

  • Отлично подходит для локальных приложений и мобильных решений.

  • Простота использования и высокая скорость на малых объёмах данных.


Как подключиться к SQLite в Python?

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

python
import sqlite3 # Создание или подключение к базе данных conn = sqlite3.connect('example.db') # Создание курсора для выполнения SQL-запросов cursor = conn.cursor()

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

python
cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER ) ''') conn.commit()

Здесь создаётся таблица users с тремя столбцами: id, name и age.


Добавление данных в таблицу

python
cursor.execute(''' INSERT INTO users (name, age) VALUES (?, ?) ''', ('Alice', 30)) conn.commit()

Вы можете добавлять данные в цикле:

python
users = [('Bob', 25), ('Charlie', 35), ('Diana', 28)] cursor.executemany('INSERT INTO users (name, age) VALUES (?, ?)', users) conn.commit()

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

python
cursor.execute('SELECT * FROM users') rows = cursor.fetchall() for row in rows: print(row)

Как использовать команду UPDATE в SQLite через Python? (Запрос: update sqlite python)

Обновление данных — важная часть работы с БД. Используем команду UPDATE.

python
cursor.execute(''' UPDATE users SET age = ? WHERE name = ? ''', (32, 'Alice')) conn.commit()

📚 Пример: Изменяем возраст всех пользователей старше 30 лет:

python
cursor.execute(''' UPDATE users SET age = age + 1 WHERE age > 30 ''') conn.commit()

Удаление данных из таблицы

python
cursor.execute('DELETE FROM users WHERE name = ?', ('Bob',)) conn.commit()

Закрытие соединения с базой данных

python
cursor.close() conn.close()

Как использовать контекстный менеджер для удобной работы с базой?

python
with sqlite3.connect('example.db') as conn: cursor = conn.cursor() cursor.execute('SELECT * FROM users') print(cursor.fetchall())

Контекстный менеджер автоматически закроет соединение даже при возникновении ошибки.


Работа с транзакциями

python
try: cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Eve', 29)) conn.commit() except sqlite3.Error as e: conn.rollback() print(f"Ошибка: {e}")

Как избежать SQL-инъекций?

Используйте параметризованные запросы:

python
user_input = 'Alice' cursor.execute('SELECT * FROM users WHERE name = ?', (user_input,))

Никогда не формируйте SQL-запросы через конкатенацию строк!


Работа с датами и временем в SQLite

python
import datetime now = datetime.datetime.now() cursor.execute(''' CREATE TABLE IF NOT EXISTS logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, event TEXT, created_at TEXT ) ''') cursor.execute('INSERT INTO logs (event, created_at) VALUES (?, ?)', ('User Login', now.isoformat())) conn.commit()

Пример полноценного приложения на SQLite и Python

python
def connect_db(): return sqlite3.connect('app.db') def create_table(): with connect_db() as conn: conn.execute(''' CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, completed BOOLEAN DEFAULT 0 ) ''') def add_task(title): with connect_db() as conn: conn.execute('INSERT INTO tasks (title) VALUES (?)', (title,)) conn.commit() def list_tasks(): with connect_db() as conn: cursor = conn.execute('SELECT * FROM tasks') return cursor.fetchall() def complete_task(task_id): with connect_db() as conn: conn.execute('UPDATE tasks SET completed = 1 WHERE id = ?', (task_id,)) conn.commit() # Использование функций create_table() add_task('Learn SQLite in Python') add_task('Build a sample app') tasks = list_tasks() for task in tasks: print(task) complete_task(1)

FAQ — Часто задаваемые вопросы

1. Можно ли использовать SQLite для веб-приложений?

Да, для небольших и средних проектов SQLite подходит отлично. Но для крупных систем рекомендуется использовать полноценные СУБД, такие как PostgreSQL или MySQL.


2. Что делать, если база данных заблокирована?

Ошибка database is locked возникает при параллельном доступе. Используйте блокировки транзакций или переходите на более серьёзные СУБД.


3. Как узнать структуру таблицы в SQLite?

python
cursor.execute('PRAGMA table_info(users)') print(cursor.fetchall())

4. Можно ли хранить файлы в SQLite?

Технически можно использовать тип BLOB, но лучше хранить пути к файлам в базе, а сами файлы — в файловой системе.


5. Как оптимизировать работу с SQLite?

Используйте индексацию, минимизируйте количество транзакций, и применяйте параметризованные запросы.


6. Как обновить несколько записей в SQLite через Python?

python
cursor.execute('UPDATE users SET age = age + 1 WHERE age < 30') conn.commit()

Заключение

Работа с SQLite в Python — это просто, эффективно и удобно для множества случаев. С помощью стандартного модуля sqlite3 можно создавать полноценные локальные базы данных без необходимости развёртывать отдельные серверы.

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

Новости