使用db.create_all()创建PostgreSQL数据库失败,请求技术排查
看起来你踩了PostgreSQL和SQLite之间的一个常见坑!我来帮你一步步解决这个问题:
问题根源
你遇到的sqlalchemy.exc.OperationalError本质原因是:SQLAlchemy可以自动创建SQLite的.db文件,但PostgreSQL不会自动帮你创建数据库实例。你的连接字符串里指定的new_test3.db是PostgreSQL的数据库名称,这个数据库在你的PostgreSQL服务器上还不存在,所以才会报错"database does not exist"。
解决方案
1. 手动创建PostgreSQL数据库
PostgreSQL要求先创建数据库实例,才能让SQLAlchemy连接并创建表。你可以用两种方式操作:
命令行方式(psql):
打开终端,先登录到PostgreSQL服务器:psql -U shammun输入你设置的密码
my_password,然后执行创建数据库的SQL命令:CREATE DATABASE new_test3;(小贴士:PostgreSQL的数据库名不需要
.db后缀,当然你坚持用new_test3.db也可以,但这不是PostgreSQL的常规命名方式)图形界面方式(pgAdmin):
打开pgAdmin,连接到你的PostgreSQL服务器,右键点击「Databases」,选择「Create > Database」,输入数据库名new_test3即可。
2. 调整连接字符串(可选但推荐)
把create.py里的数据库连接字符串改成更符合PostgreSQL习惯的写法(去掉.db后缀):
app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://shammun:my_password@localhost:5432/new_test3'
3. 重新运行create.py
现在数据库已经存在,再运行你的create.py,SQLAlchemy就能正常执行db.create_all(),创建flights和passengers两张表了。
额外小提醒
你的代码里注释掉db = SQLAlchemy()是正确的,因为你已经从models.py导入了全局的db对象,不需要重复初始化,这部分不用改动~
内容的提问来源于stack exchange,提问作者shammun




