Dataset – работа с базами в стиле Pandas

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

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

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

Введение

Часто разработчики сталкиваются с необходимостью временно сохранять данные или быстро построить прототип с базой данных. При этом не всегда удобно использовать полноценные ORM, такие как SQLAlchemy. Библиотека Dataset – работа с базами в стиле Pandas предлагает простой и удобный интерфейс к SQL-базам данных с минимумом кода, при этом сохраняя гибкость.

Dataset делает работу с базой такой же лёгкой, как с DataFrame: автоматическое создание таблиц, вставка словарей, фильтрация и экспорт данных — всё это доступно буквально в несколько строк кода.

Установка и подключение к базе

Установить библиотеку можно с помощью pip:

bash
pip install dataset

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

python
import dataset db = dataset.connect('sqlite:///mydatabase.db')

Поддерживаются и другие СУБД:

python
# PostgreSQL dataset.connect('postgresql://user:pass@localhost/dbname') # MySQL dataset.connect('mysql://user:pass@localhost/dbname')

Принципы работы Dataset

  • Таблицы создаются автоматически при первом обращении

  • Структура формируется динамически: новые поля добавляются при вставке

  • Данные сохраняются в виде словарей Python

  • API интуитивно понятное: нет SQL-запросов — только вызовы методов

Создание и вставка данных

python
table = db['users'] # Один документ table.insert({'name': 'Иван', 'age': 30}) # Несколько документов table.insert_many([ {'name': 'Анна', 'age': 25}, {'name': 'Пётр', 'age': 40} ])

Поиск и фильтрация записей

python
# Найти всех for user in table.all(): print(user) # С фильтрацией user = table.find_one(name='Анна') # С несколькими условиями results = table.find(age={'>=': 30})

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

python
# Обновление по id table.update({'id': 1, 'age': 31}, ['id']) # Удаление table.delete(name='Пётр')

Экспорт и импорт данных

python
# Экспорт в CSV import csv with open('users.csv', 'w') as f: writer = csv.DictWriter(f, fieldnames=['id', 'name', 'age']) for row in table.all(): writer.writerow(row)

Также поддерживается экспорт в JSON, а данные можно импортировать из словарей и списков.

Интеграция с Pandas и обработка данных

python
import pandas as pd df = pd.DataFrame(table.all()) print(df.describe())

Или наоборот:

python
table.insert_many(df.to_dict(orient='records'))

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

python
with db as tx: tx['logs'].insert({'event': 'start'}) tx['logs'].insert({'event': 'end'})

Транзакция откатывается при исключении, сохраняется при завершении блока.

Использование с SQLite, PostgreSQL и другими

В зависимости от URI подключается нужный движок:

python
sqlite_db = dataset.connect('sqlite:///:memory:') pg_db = dataset.connect('postgresql://...')

Dataset использует SQLAlchemy под капотом, поэтому совместим практически со всеми SQL-базами.

Расширенные возможности Dataset

  • Работа с вложенными словарями

  • Автоматическая индексация (если явно указать primary_id)

  • Поддержка bulk-операций

  • Возможность использовать upsert() для обновления или вставки

python
table.upsert({'name': 'Анна', 'age': 26}, ['name'])

Интеграция с Flask, FastAPI, CLI-приложениями

Dataset отлично подходит для:

  • CLI-программ — как простая база без настройки

  • Flask-приложений — быстрое логирование, сессии

  • FastAPI — для микросервисов и prototyping

python
@app.post('/user') def add_user(data: dict): table.insert(data) return {"status": "ok"}

Сравнение с ORM и другими библиотеками

Библиотека SQL-запросы ORM Простота Подходит для
Dataset Нет Нет Очень высокая Скрипты, прототипы
SQLAlchemy Да Да Средняя Сложные проекты
Pandas Нет Нет Высокая Анализ данных
TinyDB Нет Нет Высокая NoSQL, хранение JSON

Тестирование и прототипирование

Идеально подходит для in-memory работы:

python
test_db = dataset.connect('sqlite:///:memory:') table = test_db['test'] table.insert({'value': 42})

Можно быстро очистить таблицу:

python
table.delete()

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

1. Что такое Dataset?
Это Python-библиотека для работы с SQL-базами в стиле Pandas — без SQL-запросов и с простым API.

2. Какие СУБД поддерживаются?
SQLite, PostgreSQL, MySQL, MSSQL и другие через SQLAlchemy.

3. Можно ли использовать Dataset с Pandas?
Да, данные можно импортировать/экспортировать в DataFrame.

4. Поддерживаются ли транзакции?
Да, через with db: или вручную.

5. Подходит ли Dataset для продакшна?
Для лёгких задач — да. Для сложных бизнес-логик лучше использовать ORM.

6. Что произойдёт, если таблицы не существует?
Она будет создана автоматически.

Полный справочник по ключевым функциям и модулям библиотеки Dataset для Python

Установка

bash
pip install dataset

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

Функция Описание
dataset.connect(url) Подключается к базе по URI.
python
import dataset db = dataset.connect("sqlite:///example.db")

URI может быть:

  • SQLite: "sqlite:///file.db"

  • PostgreSQL: "postgresql://user:pass@localhost/dbname"

  • MySQL: "mysql://user:pass@host/dbname"


Доступ к таблицам

Метод Описание
db["table_name"] Получает таблицу (создает при необходимости).
table = db.get_table("name") Альтернатива через метод.
python
table = db["users"]

Вставка данных

Метод Описание
table.insert(dict) Вставляет одну запись.
table.insert_many([dict, ...]) Массовая вставка.
table.upsert(dict, keys=[...]) Вставка или обновление (по ключам).
python
table.insert({"name": "Ваня", "age": 25}) table.insert_many([{"name": "Оля"}, {"name": "Макс"}])

Получение данных

Метод Описание
table.all() Получить все записи.
table.find(**filters) Найти записи по фильтру.
table.find_one(**filters) Найти одну запись.
table.distinct("field") Уникальные значения поля.
python
users = table.find(age=25) user = table.find_one(name="Ваня")

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

Метод Описание
table.update(dict, keys=[...]) Обновляет записи по ключам.
table.upsert(dict, keys=[...]) Вставка или обновление.
python
table.update({"name": "Ваня", "age": 26}, ["name"])

Удаление данных

Метод Описание
table.delete(**filters) Удаляет записи по условию.
python
table.delete(name="Макс")

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

Контекст Описание
with db as tx: Автоматический commit/rollback.
python
with db as tx: tx["users"].insert({"name": "Тест"})

Выполнение произвольного SQL

Метод Описание
db.query(sql) Выполняет SELECT-запрос.
db.executable(sql) INSERT/UPDATE/DELETE запрос.
python
result = db.query("SELECT * FROM users WHERE age > 20")

Метаданные и служебные методы

Метод Описание
db.tables Список всех таблиц.
table.columns Список всех колонок в таблице.
db.create_table(name, primary_id=..., primary_type=...) Явное создание таблицы.
python
print(db.tables) print(table.columns)

Использование с SQLite

python
db = dataset.connect("sqlite:///local.db") users = db["users"] users.insert({"name": "Иван", "email": "ivan@example.com"})

Пример полного скрипта

python
import dataset db = dataset.connect("sqlite:///users.db") table = db["people"] # Добавление table.insert({"name": "Ваня", "city": "Москва"}) # Чтение for person in table.all(): print(person["name"], person["city"]) # Обновление table.update({"name": "Ваня", "city": "Питер"}, ["name"]) # Удаление table.delete(name="Ваня")

Совместимость

Интеграция Применение
SQLAlchemy Используется под капотом.
SQLite/PostgreSQL/MySQL Поддерживаются через SQLAlchemy URI.
Pandas Можно использовать pd.read_sql_table("table", db.engine).
Flask/FastAPI Можно подключать как простой слой доступа к данным.

 

Заключение

Dataset – работа с базами в стиле Pandas — это идеальный инструмент для быстрого прототипирования, временного хранения данных и автоматизации. С интуитивным API, минимальной настройкой и совместимостью с большинством SQL-баз данных, Dataset делает работу с БД простой и понятной даже для новичков.