Утилиты для работы с системой импорт/экспорта классификаторов в едином формате.
Модуль table_to_file предлагает набор функций для импорта/экспорта таблиц из БД в формат json и обратно.
Структура json'а описана в документации к протоколу передачи классификаторов см раздел "2. Классификатор".
Протокол и структура хранения классификаторов в json, как его составная часть, разрабатываются как общесистемные решения для проектов Лаборатории.
Ограничения:
- Последовательности (Sequences) должны быть в той же схеме, что и таблица их использующая
Документация
Руководство пользователя для разработчика-бэкендера:
- Быстрый старт — установка, минимальные примеры экспорта/импорта, выбор режима импорта.
- Справочник API — сигнатуры, параметры, исключения, формат статистики и квитанции ФЛК.
- Формат JSON классификатора — структура файла, допустимые типы, правила ФЛК.
- Типовые сценарии на flask-restx — готовые эндпоинты импорта/экспорта, обработка ошибок, рекомендации по эксплуатации.
Интерфейс взаимодействия с модулем.
Модуль представляет API состоящее из 4х методов:
export_table_to_dict - Преобразует таблицу из бд в словарь содержащий структуру и данные таблицы.
Параметры:
table_name- Имя таблицы в базе данных.dbname- Имя базы данных.user- Пользователь БД.password- Пароль пользователя.host- Адрес сервера баз данных.port- Порт сервера баз данных.
Возвращаемое значение:
- Словарь со структурой и данными таблицы. Структура словаря соответствует описанной структуре классификатора в документации к протоколу.
import_table_from_dict - Импортирует данные из словаря подходящей структуры в базу данных.
Поведение зависит от параметра import_mode: если он равен None (по умолчанию), таблица не должна существовать в БД — она будет создана и заполнена данными из словаря. Если он равен update, таблица должна существовать в БД — её данные будут обновлены. В случае нарушения условий существования таблицы, а также при несоответствии структуры описанной в словаре таблице существующей в базе данных поднимается исключение ValueError.
Параметры:
table- Структура таблицы и данные для импорта в виде словаря.table_name- Имя таблицы в базе данных.dbname- Имя базы данных.user- Пользователь БД.password- Пароль пользователя.host- Адрес сервера баз данных.port- Порт сервера баз данных.foreign_tables_mappingСловарь соответствия имен связанных таблиц в словаре и в базе данных. Ключи и значения словаря кортежи состоящие из пары значений ('имя_схемы', 'имя_таблицы') ключ - имена в структуре данных, значения - имена в базе данных. Пример {('имя_схемы_в_структуре', 'имя_таблицы_в_структуре'): ('имя_схемы_в_бд', 'имя_таблицы_в_бд')}import_modeРежим импорта.None- создание новой таблицы (таблица не должна существовать),update- обновление существующей таблицы (таблица должна существовать). По умолчаниюNone.load_dataЗагружать ли данные при создании новой таблицы (import_mode=None).True- структура и данные,False- только структура. По умолчаниюFalse.
Возвращаемое значение:
- нет
dict_as_json - Сохраняет словарь с таблицей в виде json в BytesIO объект
Параметры:
table- Словарь содержащий структуру таблицы для сохранения в json формате.
Возвращаемое значение:
- Объект BytesIO содержащий "файл" с переданной структурой в json формате.
json_to_table - Принимает или путь к файлу с json или BytesIO объект из которого
Параметры:
data_source- Имя файла в системе или объект BytesIO содержащий в себе json соответствующего формата.table_name- Имя таблицы в базе данных.dbname- Имя базы данных.user- Пользователь БД.password- Пароль пользователя.host- Адрес сервера баз данных.port- Порт сервера баз данных.foreign_tables_mappingСловарь соответствия имен связанных таблиц в словаре и в базе данных.import_modeРежим импорта.None- создание новой таблицы (таблица не должна существовать),update- обновление существующей таблицы (таблица должна существовать). По умолчаниюNone.load_dataЗагружать ли данные при создании новой таблицы (import_mode=None).True- структура и данные,False- только структура. По умолчаниюFalse.
Возвращаемое значение:
- нет
Установка и использование
Этот проект использует uv для управления зависимостями.
Установка зависимостей
uv sync
Активация виртуального окружения
uv shell
Установка дополнительных зависимостей для разработки
uv sync --group dev
Запуск тестов.
Для запуска тестов необходимо установленный в системе Docker. Тесты запускаются из директории проекта командой
docker-compose -f docker-compose.pytest.yml run --build --rm tests
Также для запуска можно использовать вариант с двумя последовательными командами
docker-compose -f docker-compose.pytest.yml build --no-cache
docker-compose -f docker-compose.pytest.yml run --rm tests
После тестов желательно удалить созданные контейнеры
docker-compose -f docker-compose.pytest.yml down -v
Альтернатива если в системе установлен make Make for Windows, How to install and use "make" in Windows?
make test
Последние изменения
[0.5.0] - 2026-10-15
Добавлено:
- Импорт/экспорт и ФЛК переведены на формат классификатора с обёрткой
payload(структура и данные внутриpayload.structure/payload.data). - Расширенный форматно-логический контроль (
FLKValidator): семантические проверки структуры таблицы, ограничений, последовательностей и значений данных; защита от SQL-инъекций вdefault/check_clause; лимит размера JSON (max_size_bytes). - Параметры
return_stats(статистика импорта: вставлено/обновлено) иexcluded_columns(колонки, значения которых не изменяются) в функцияхjson_to_tableиimport_table_from_dict. - Модуль
settingsс константойDEFAULT_SCHEMA; нормализация DEFAULT-значений сnextvalпод целевую схему и таблицу. - Руководство для разработчика-бэкендера: Быстрый старт, Справочник API, Формат JSON, Типовые сценарии на flask-restx.
Внимание (совместимость):
- Импорт принимает только формат с
payload— старый формат (structure/data на верхнем уровне) убран. - Схема по умолчанию —
public(ранее жёстко заданнаяclassification); задаётся параметромschema_name.
[0.4.0] - 2026-09-11
Добавлено:
- Параметр
import_modeв функцияхimport_table_from_dictиjson_to_table:None(по умолчанию) - создание новой таблицы (таблица не должна существовать),update- обновление существующей таблицы (таблица должна существовать). - Параметр
load_dataв функцияхimport_table_from_dictиjson_to_table: при создании новой таблицы (import_mode=None) позволяет загружать только структуру (False, по умолчанию) или структуру вместе с данными (True).
Полная история изменений
Смотрите полную историю всех изменений в файле CHANGELOG.md или на странице проекта
Metadata
Release files for json-2-postgres 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| json_2_postgres-0.5.0.tar.gz | 89.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| json_2_postgres-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 130.7 kB
Release files / json_2_postgres-0.5.0.tar.gz
| Download URL | json_2_postgres-0.5.0.tar.gz |
|---|---|
| Size | 89.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
20b37a1015f92137d465d7b94ec83dcba81360399cde7e37abaffe0bcd8994f6
|
|
BLAKE2b-256 checksum How to use checksums |
322b6f276816e9ed130f884591d0a79ac00ff77d7e4bf2674901a60ad7d14cae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.13
|
Release files / json_2_postgres-0.5.0-py3-none-any.whl
| Download URL | json_2_postgres-0.5.0-py3-none-any.whl |
|---|---|
| Size | 41.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d9d0f491dccda91fbd18b3e4b1f8003be8773cdd74345e325a0858ed70f7f326
|
|
BLAKE2b-256 checksum How to use checksums |
094a6c9183b8ca5391fb119e503b097acf7d6c25b761edd9c49a3515ce38592b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.13
|