Подключение к Firebird из Python

Драйвер firebirdsql — чистый Python: не требует ни клиентской библиотеки fbclient, ни компиляции, ставится в venv и контейнеры одной командой. Работает по сети с Firebird 2.5 и новее (проверено на 5.0).

Установка

pip install firebirdsql==1.4.7

Подключение и запрос

import firebirdsql

con = firebirdsql.connect(
    dsn="firebird:/var/lib/firebird/data/employee.fdb",
    user="SYSDBA",
    password="masterkey",
    charset="utf-8",
)

cur = con.cursor()
cur.execute(
    "SELECT FIRST_NAME, LAST_NAME, SALARY "
    "FROM EMPLOYEE ORDER BY SALARY DESC ROWS 5"
)
for first, last, salary in cur.fetchall():
    print(f"  {first} {last} — {salary:.2f}")

con.close()

⚠️ Нюанс с портом, пойманный на практике. Формат DSN — host:port:path, но с Firebird 5 и драйвером 1.4.7 при явном порте (firebird/3050:/path) подключение падает с «unavailable database». Порт опускается (firebird:/path) — используется 3050 по умолчанию.

Параметризованные запросы

Плейсхолдер ?, значения — кортежем:

cur.execute(
    "SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEE WHERE DEPT_NO = ?",
    (dept,),
)

Альтернативные драйверы

ДрайверЧто требуетКогда брать
firebirdsql (pure)ничегопо умолчанию, контейнеры, venv
fdbfbclientлегаси-проекты, старые версии Firebird
firebird-driverfbclientофициальный современный, FB 3+

Для асинхронных приложений (FastAPI, aiogram) есть asyncio-диалект SQLAlchemy поверх этих драйверов.

Пример целиком

Рабочий пример с этим кодом — в репозитории сайта: Dockerfile + docker compose с Firebird 5.0.4 и демо-базой employee, прогоняется одной командой.

Что почитать дальше

Обсуждение