首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为测试创建数据库时出现FastAPI psycopg2错误

为测试创建数据库时出现FastAPI psycopg2错误
EN

Stack Overflow用户
提问于 2022-04-26 05:24:47
回答 1查看 292关注 0票数 0

我正试图在我的FastAPI应用程序中测试我的数据库。

代码语言:javascript
运行
复制
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中,我是这样定义引擎的:

代码语言:javascript
运行
复制
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。有什么想法吗?我的设置有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2022-05-01 10:42:23

如果数据库中已经有一个表,则必须使用MetaData来映射它们,如下所示:

代码语言:javascript
运行
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72008767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档