You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FASTAPI测试数据库未创建:执行pytest提示数据库不存在

问题原因

Base.metadata.create_all(bind=engine) 只会创建数据库内的表结构,它没有权限也不会自动创建数据库本身。你连接的test_social_media_api数据库根本不存在,所以触发了连接失败的错误。

解决办法

方法1:手动提前创建测试数据库

打开psql命令行执行:

CREATE DATABASE test_social_media_api;

或者用pgAdmin这类可视化工具创建同名数据库。

方法2:代码自动创建数据库

先连接PostgreSQL默认存在的postgres数据库,执行创建测试库的语句,再重新连接到新库创建表。修改你的代码如下:

from sqlalchemy import create_engine
from sqlalchemy_utils import database_exists, create_database

# 构造测试数据库的连接URL
db_url = (
    f"postgresql://{settings.database_username}"
    f":{settings.database_password}"
    f"@{settings.database_hostname}"
    f":{settings.database_port}"
    f"/test_{settings.database_name}"
)

# 检查数据库是否存在,不存在则创建
if not database_exists(db_url):
    create_database(db_url)

# 后续创建引擎、会话和表结构的逻辑不变
engine = create_engine(db_url)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base.metadata.create_all(bind=engine)

# 以下代码保持原样...

注意:需要先安装依赖包:

pip install sqlalchemy-utils

补充说明

PostgreSQL的连接规则是:必须先有一个已存在的数据库才能建立连接,create_all是建立连接之后才会执行的表结构创建操作,所以它无法凭空创建数据库本身。

内容的提问来源于stack exchange,提问作者Nikita Kurabtsev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:10:19