Быстрый старт

Установка

pip install -r requirements.txt

На macOS также нужен клиент Firebird:

brew install firebird

Настройка подключения

Через .env в корне проекта:

DB_HOST=192.168.88.64
DB_PORT=3050
DB_DATABASE=C:\Program Files (x86)\AutoDealer\AutoDealer\Database\StOm1.fdb
DB_USER=SYSDBA
DB_PASSWORD=masterkey
DB_CHARSET=UTF8

Или явно в коде (вызов до импорта моделей):

from autodealer.connection import configure_database

configure_database(
    host="192.168.88.64",
    port=3050,
    database=r"C:\path\to\AutoDealer.fdb",
    user="SYSDBA",
    password="masterkey",
    charset="UTF8",
)

Использование моделей

from autodealer.domain.bank import Bank
from autodealer.domain.users import Users

# Все записи
banks = Bank.objects.all()

# Фильтрация
active = Bank.objects.filter(hidden=0).order_by('name').all()

# Один объект
bank = Bank.objects.get(bank_id=1)
print(bank.name, bank.bik)

# Проверка существования
if Bank.objects.filter(name__icontains='сбер').exists():
    print("Сбербанк найден")

# Список словарей
rows = Bank.objects.filter(hidden=0).values('bank_id', 'name')

Запись данных

# Создание
bank = Bank.objects.create(name="Тинькофф", bik="044525974", hidden=0)

# Массовое обновление
Bank.objects.filter(hidden=1).update(hidden=0)

# Удаление
Bank.objects.filter(hidden=1).delete()

Сложные запросы (low-level)

Для многотабличных запросов или сложных условий используйте session_scope:

from sqlalchemy import select
from autodealer.connection import session_scope
from autodealer.domain.bank import Bank

with session_scope() as session:
    result = session.execute(
        select(Bank)
        .where(Bank.hidden == 0)
        .order_by(Bank.name)
    ).scalars().all()

Генерация моделей

При изменении схемы БД — перегенерировать модели:

python autodealer/tools/generate_models.py

Скрипт перезаписывает все файлы в autodealer/domain/.