PostgreSQL не заполняется асинхронно (FastAPI)Python

Программы на Python
Ответить
Anonymous
 PostgreSQL не заполняется асинхронно (FastAPI)

Сообщение Anonymous »

Я относительно новичок в FastAPI и пытаюсь создать класс с одной таблицей, которая заполняется данными, как только сервер начинает использовать:

Код: Выделить всё

uvicorn main:app --reload
Я часами пытался заставить его работать и устранять неполадки, но на данном этапе я был бы очень признателен за совет.
Вот мой код на данный момент:

Код: Выделить всё

from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import List, Annotated
from sqlalchemy.orm import Session
from sqlalchemy import Column, Integer, String, text
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker, declarative_base
from contextlib import asynccontextmanager

DATABASE_URL = "postgresql+asyncpg://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"

Base = declarative_base()

class Person(Base):
__tablename__ = "persons"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
age = Column(Integer)

engine = create_async_engine(DATABASE_URL, future=True, echo=True)

SessionLocal = sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False)

app = FastAPI()
@asynccontextmanager
async def lifespan(app: FastAPI):
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
await seed_database(conn)

yield
await engine.dispose()

app.lifespan_context = lifespan

async def seed_database(conn):
await conn.execute(text("INSERT INTO persons (name, age) VALUES ('Alice', 23)"))
await conn.execute(text("INSERT INTO persons (name, age) VALUES ('Bob', 22)"))
await conn.commit()
print("Database seeded with initial persons.")

@app.get("/")
async def read_root(db: AsyncSession = Depends(lambda: SessionLocal())):
result = await db.execute(text("SELECT * FROM persons"))
persons = result.mappings().all()
return {"persons": persons}

Я пробовал менять код и использовать обходные пути, но по какой-то причине не могу заставить его работать..

Подробнее здесь: https://stackoverflow.com/questions/793 ... nc-fastapi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»