簡體   English   中英

為測試創建數據庫時出現 FastAPI psycopg2 錯誤

[英]FastAPI psycopg2 error when creating database for tests

我正在嘗試在我的 FastAPI 應用程序中測試我的數據庫。

from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.main import app
from app.db import Base, get_db, get_session

SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base.metadata.create_all(bind=engine)

def override_get_db():
    try:
        db = TestingSessionLocal()
        yield db
    finally:
        db.close()

app.dependency_overrides[get_db] = override_get_db

client = TestClient(app)

def test_get_users():
    response = client.get("/users")
    assert response.status_code == 200

這給了我一個錯誤sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "db" to address: Name or service not known

在我的app.db中,這是我定義引擎的方式:

engine = create_engine(settings.DATABASE_URL, pool_pre_ping=True, echo=True, echo_pool=True)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)


def get_session():
    with Session(engine) as session:
        yield session

def get_db() -> Generator:
    try:
        db = SessionLocal()
        yield db
    finally:
        db.close()

我也嘗試使用get_session而不是get_db ,然后錯誤是: no such table: users 任何想法我的設置有什么問題?

如果你的數據庫中已經有一個表,你必須使用 MetaData 來 map 他們像:

from sqlalchemy import create_engine, MetaData
meta = MetaData(bind=engine)
meta.reflect(views=True)

table_name = meta.tables['table_name']

Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
session = Session()

def get_db():
   db = session
   try:
        yield db
   finally:
        db.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM