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
相关产品推荐
相关产品推荐

