#python #sqlalchemy #fastapi
#python #sqlalchemy #fastapi
Вопрос:
Я разрабатываю два приложения в FastAPI, которые будут использовать одни и те же структуры модели данных — они оба работают с одной и той же базой данных, но под разными пользователями с разными учетными данными. Поэтому в структуре моего проекта я создал три папки — одну для приложения проекта FastAPI A (серверная часть python для интерфейсного приложения), одну для приложения проекта FastAPI B (серверная часть python для приложения пользователей backoffice) и одну для общих классов, включая файлы с определением таблиц SQLAlchemy — папка C. В flask все работало как по маслу — у каждого приложения A и B были отдельные конфигурационные файлы с разными учетными данными для базы данных. У меня не было никаких проблем с правильным подключением к базе данных. На основе того, какой проект я запустил, были использованы правильные учетные данные базы данных. Я использовал расширение flask_sqlalchemy, и оно позаботилось обо всем. Теперь у меня есть файл настроек для каждого приложения A и B, который содержит правильные учетные данные и строку подключения к базе данных. Проблема в том, что я хочу, чтобы код в папке C не зависел от папок A и B. Это означает, что я хотел бы каким-то образом писать без зависимости от файлов project A или project B SQLAlchemy с описанием общих структур базы данных. В настоящее время я понятия не имею, возможно ли это или как это сделать. Я думаю, что такое разделение кода и приложений является хорошей и, возможно, даже необходимой идеей с точки зрения безопасности — я использую пользователей с разными наборами разрешений для каждого приложения. Просто понятия не имею, как как-то правильно обеспечить зависимость кода в папке C для исправления учетных данных базы данных.
Комментарии:
1. Я решил это, установив переменную env в самом начале запуска приложения: os.environ[«SQLALCHEMY_DATABASE_URI»] = настройки. SQLALCHEMY_DATABASE_URI а затем в каталоге C у меня есть database.py со следующим: print(«Запустить базу данных:» os.environ[«SQLALCHEMY_DATABASE_URI»]) engine = create_engine(os.environ[«SQLALCHEMY_DATABASE_URI»]) SessionLocal = создатель сеансов (автокоммит = False, автозапуск = False, привязка = движок) База = декларативная база ()
2. Но я почти уверен, что должно существовать более элегантное и подверженное ошибкам решение. Это может вызвать проблемы при одновременном запуске обоих приложений A и B.
Ответ №1:
Я нашел дополнительный пакет, разработанный специально для использования SQL alchemy с FastAPI, который решает мою проблему: https://pypi.org/project/FastAPI-SQLAlchemy /