
Мой опыт использования Fastapi и библиотеки SQLAlchemy для асинхронной работы с базой данных Postgres
Привет, меня зовут Дмитрий и я бы хотел поделиться своим опытом использования Fastapi и библиотеки SQLAlchemy для работы с базой данных Postgres.
Fastapi и SQLAlchemy ー это отличная комбинация для разработки асинхронных веб-приложений на Python. Fastapi предоставляет мощные возможности для создания RESTful API, а SQLAlchemy предоставляет ORM-интерфейс для работы с базой данных.
Одним из первых заданий, с которым я столкнулся, было создание таблицы в базе данных Postgres, используя модель User в SQLAlchemy. Я нашел простое решение для этой задачи, которое хотел бы поделиться с вами.
Шаг 1⁚ Установка зависимостей
Перед началом работы нужно установить необходимые зависимости. Я использовал pipenv для управления зависимостями⁚
pipenv install fastapi sqlalchemy asyncpg
Шаг 2⁚ Создание модели User
Затем я создал модель User с помощью SQLAlchemy⁚
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base declarative_base
class User(Base)⁚
__tablename__ 'users'
id Column(Integer, primary_keyTrue, indexTrue)
name Column(String, nullableFalse)
email Column(String, nullableFalse, uniqueTrue)
password_hash Column(String, nullableFalse)
Здесь я определил таблицу ″users″ с помощью атрибута `__tablename__`. Затем я создал несколько столбцов, таких как id, name, email и password_hash.
Шаг 3⁚ Создание таблицы в базе данных
Для создания таблицы в базе данных Postgres я использовал следующий код⁚
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
DATABASE_URL ″postgresql://username:password@localhost/mydatabase"
engine create_engine(DATABASE_URL)
# Создание всех таблиц, отсутствующих в базе данных
Base.metadata.create_all(bindengine)
# Открытие сессии
SessionLocal sessionmaker(autocommitFalse, autoflushFalse, bindengine)
db SessionLocal
Здесь я использовал URL-адрес базы данных Postgres и метод `create_engine` из SQLAlchemy для создания подключения к базе данных. Затем я использовал метод `metadata.create_all` из SQLAlchemy, который создает все таблицы, отсутствующие в базе данных.
Шаг 4⁚ Проверка существования таблицы
Если вы хотите проверить, существует ли уже таблица в базе данных, вы можете использовать следующий код⁚
from sqlalchemy.dialects import postgresql
# Проверка существования таблицы
if not engine.dialect.has_table(engine, ″users″)⁚
User.__table__;create(bindengine)
Здесь я использовал метод `has_table` из SQLAlchemy, чтобы проверить существование таблицы ″users″ в базе данных. Если таблица не существует, я создал ее, используя метод `create`.
В результате использования Fastapi и SQLAlchemy я смог легко создать таблицу в базе данных Postgres, используя модель User. Весь процесс происходит асинхронно, что позволяет создавать эффективные и быстрые веб-приложения.
Я надеюсь, что этот опыт поможет вам при работе с Fastapi, SQLAlchemy и базой данных Postgres.