Skip to main content

Пример проекта

Структура проекта

Директория / файл Описание
alembic/
Настройки alembic
conf/ Настройки окружений. 
conf/settings

Файлы основных настроек. 

db/

Описание структуры базы данных.

initializer.py - Инициализация базы данных, метаданных 

db/tablesdefinition

Файлы описания структур таблиц и методов взаимодействия с данными.

docker/ Настройки контейнера
docker/data Данные БД
docker/docker-entrypoint-initdb.d

Скрипты инициализации БД

main.sql - Файл скрипта иницализации

docker/docker-compose.yml Compose файл
src/ Дополнительные модули
main.py Точка входа
error.log
Файл лога.

Предварительная настройка

Для работы примера необходимо установить docker. 

Клонировать проекта с репозитория 

git clone https://github.com/sudaka/alembictemplate.git

Перейти в директорию проекта, создать виртуальное окружение и активировать 

cd alembictemplate
python3 -m venv env
source env/bin/activate

Установить дополнительные модули 

pip install -r requirements.txt

Перейти в директорию docker и в файле docker-compose.yml настроить пути, имя БД, логин и пароль к новой базе данных. 

services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_DB: "learnsqlalchemy"
      POSTGRES_USER: "learner"
      POSTGRES_PASSWORD: "StrongPassword123"
      PGDATA: "/home/sergey/projects/alembictemplate/docker/data/pgdata"
    volumes:
      - .:/docker-entrypoint-initdb.d
      - mydata:/home/sergey/projects/alembictemplate/docker/data
    ports:
      - "5430:5432"
volumes:
  mydata:

В файле docker-entrypoint-initdb.d/main.sql изменить имя БД, логин и пароль.

CREATE DATABASE learnsqlalchemy;
CREATE USER learner WITH PASSWORD 'StrongPassword123';
ALTER ROLE learner WITH PASSWORD 'StrongPassword123';
GRANT ALL PRIVILEGES ON DATABASE learnsqlalchemy to learner;

В директории docker запустить контейнер БД в фоновом режиме. 

docker compose up -d

Для остановки контейнера: 

docker compose stop

Сейчас,

запустив

Вконтейнер, при помощи консольного клиентапке psql можно провекрить соединение с базой
данных для пользователя. 

psql -d learnsqlalchemy -U learner -W -h 127.0.0.1 -p 5430

НДля работы с настройками сисв форматемы

Иjson используется библиотека src/libsettings.py Описание библиотеки Создать папку src, скопировать из проекта библиотеку libsettings.py 

Настройки системы

Файлы основных настроек расположены в conf/settings/  Файл base.py 

'''Loading settings to project'''
from src.libsettings import Jsettings

# dev settings
mysettings = Jsettings(settingsfname='conf/settings/settings.json',
                       schemafname='conf/settings/schema.json')
mysettings.load_settings()

Файл schema.json 

{
    "type": "object",
    "properties": {
        "db_username": {"type": "string"},
        "db_password": {"type": "string"},
        "db_host": {"type": "string"},
        "db_port": {"type": "string"},
        "db_name": {"type": "string"}
    }, 
    "required": ["db_username", "db_password", "db_host",
                "db_port", "db_name"]
}

Файл settings.json 

{
    "db_username": "learner",
    "db_password": "StrongPassword123",
    "db_host": "127.0.0.1",
    "db_port": "5430",
    "db_name": "learnsqlalchemy"
}

Файл base.py проверяет схему и создает объект настроек mysettings из файла settings.json. Для получения объекта настроек нужно импортировать объект mysettings.mysettings в нужном модуле. В данный момент присутствуют настройки базы данных с префиксом db_*

Если такая усложненная система управления настройками покажется излишней, возможно использовать экспорт настроек напрямую из файла.

Настройка системы зверсионировапускния базы данных alembic

Инициализируем alembic в корне проекта. 

alembic init alembic

В качестворне спроерверкта использбудет сяоздан postgresql.файл alembic.ini, будет создана папка alembic