Найти тему
Заходи в Ай-Ти

FastAPI - создание web-приложения. Часть 4 (Подключение к базе данных)

Супер, на данный момент мы сделали очень много. Теперь пришло время быть настойчивыми. Мы собираемся подключить базу данных к fastapi. Я выбираю PostgreSQL. Возможно, вам потребуется загрузить Postgres и DBeaver / PgAdmin (для мониторинга Postgres). Если вы просто хотите играть и учиться на своем локальном компьютере, вы можете не загружать Postgres. Мы можем использовать SQLite . Это простая в использовании база данных на основе файловой системы, поддерживаемая Python.

Просто прикольная картинка
Просто прикольная картинка
  • Меньше переключений контекста : мы пишем операторы Python, которые преобразуются в запросы к базе данных с помощью ORM.
  • Переключение баз данных не требует внесения изменений в базу данных, достаточно лишь изменить объект подключения.
  • Плюсы: миграции, пулы соединений и транзакции поддерживаются «из коробки».
  • Оптимизирован для производительности: ORM знают, как оптимизировать наши запросы (большую часть времени!)

Хорошо, давайте добавим следующие строки в файл requirements.txt  и запустим pip install -r requirements.txt

fastapi==0.95.1
uvicorn==0.22.0
SQLAlchemy==2.0.13
psycopg2==2.9.6
psycopg2-binary==2.9.6
python-dotenv==1.0.0

Теперь нам нужно добавить информацию в базе данных. Я предлагаю не хранить эту информацию в необработанном виде. Вместо этого я бы предложил хранить эту информацию в переменных среды. Чтобы упростить процесс создания переменных среды, мы воспользуемся python-dotenv. Давайте создадим новый файл с именем .env.

В файле «.env» мы собираемся хранить важную информацию для наших приложений, такую ​​​​как ключи API, секретный ключ API и URL-адреса базы данных. Итак, давайте разместим эту информацию в файле .env:

POSTGRES_USER=nofoobar
POSTGRES_PASSWORD=supersecret
POSTGRES_SERVER=localhost
POSTGRES_PORT=5432
POSTGRES_DB=blogdb

Теперь я собираюсь изменить наш файл конфигурации, потому что мы не хотим напрямую взаимодействовать с файлом «.env», а вместо этого хотим разместить все конфигурации нашего проекта в одном конкретном месте. В нашем случае это файл config.py. Итак, давайте изменим файл config.py для чтения из файла .env, чтобы мы могли воспользоваться ими.

Ребята, я принял сложное для меня решение: я буду вствлять картинки вместо текста(дзен не поддерживает вставку кода), потому что иначе это выглядит ужасно. В этом есть свои плюсы. Переписывая код, вы лучше запомните содержимое. Кто хочет посмотреть код - добро пожаловать в мой гитхаб, там я выкладываю все свои проекты для вас❤️

Итак, продолжим... На чем мы остановились? А, точно на файле config.py:

Содержимое файла config.py
Содержимое файла config.py

Почти у цели, просто побудь со мной какое-то время. Это я делаю для того, чтобы сделать наш проект более удобным в сопровождении. За свой небольшой опыт я усвоил "Разработка программного обеспечения больше связана с обслуживанием, чем с разработкой".
Хорошо, теперь мы можем перейти к настройке базы данных, введите следующие строки в db >
session.py

Содержимое файла session.py
Содержимое файла session.py
  • Мы создаем механизм sqlalchemy с URL-адресом базы данных Postgres. Как говорилось ранее, вы также можете создать движок с помощью sqllite. просто раскомментируйте закомментированные строки и закомментируйте SQLALCHEMY_DATABASE_URL = settings.DATABASE_URL 
    engine = create_engine(SQLALCHEMY_DATABASE_URL)
  • Затем мы создаем SessionLocal. Как только мы создадим экземпляр класса  SessionLocal , этот экземпляр станет фактическим сеансом базы данных. Помните об этом: позже мы создадим настоящий сеанс базы данных для каждого запроса.

Класс модели — это Pythonic-представление таблицы базы данных. Хорошо, теперь мы собираемся создать класс супердедушки (да-да, именно так 😅). Каждая модель будет наследовать этот базовый класс, и мы будем использовать этот базовый класс для создания всех таблиц базы данных. Кроме того, мы сохраним всю общую логику, связанную с таблицами, в этом «Базовом» классе. Например, все наши таблицы будут иметь поле id. Это будет использоваться для уникальной идентификации каждой строки/записи. Давайте создадим этот базовый класс в файле db > base_class.py.

Содержимое файла base_class.py
Содержимое файла base_class.py

Уже сделано много, но не хватает одной важной вещи. Думайте, думайте  😁
Наше приложение находится в файле
main.py и понятия не имеет, что мы пишем в других файлах! Итак, мы должны указать нашему приложению создать для нас таблицы базы данных. Итак, добавьте следующий код в main.py

Содержимое файла main.py
Содержимое файла main.py

Если вы используете компьютер Linux/Mac, используйте приведенную ниже команду, чтобы создать базу данных и пользователя с необходимыми разрешениями.

Добавляем нужные разрешения в зависимости от вашей ОС
Добавляем нужные разрешения в зависимости от вашей ОС

Теперь, если вы используете Postgres, откройте PgAdmin и создайте новую базу данных, такую ​​же, как та, которая указана вами в файле «.env». (yourdbname_eg_debug) и перезапустите сервер. Наша база данных и сервер теперь подключены друг к другу. Если мы используем SQLite, нам даже не нужно создавать базу данных вручную. Просто перезапустите сервер. Вот картинка моего подключения к базе данных Postgres с помощью PGAdmin.

Гайд по работе с PGAdmin
Гайд по работе с PGAdmin

Готово, теперь встретимся в следующем посте. Я все устал так много печатать. 😴

✅ В следующей части мы мы узанем что такое миграции и зачем они нужны.

Читайте также: Часть 5 (Alembic и миграции баз данных)

❤️ Если вам понравилась статья, ставьте лайк и подписывайтесь на мой канал (Заходи в Ай-Ти).

👍 Если у вас остались вопросы или есть интересные темы, которые вы хотите, чтобы я разобрал, то пишите в комментариях. Ваше мнение очень важно для меня!

#fastapi #fastapi python #fastapi docker #питон разработчик #backend python курс #обучение python бесплатно