sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)致命:数据库不存在

sha*_*mun 3 python sqlalchemy flask flask-sqlalchemy

我正在尝试使用 SQLAlchemy 中的两个表填充数据库。我已经创建了数据库 test_database,现在我尝试在其中创建 2 个表。我已经检查过该数据库是否已使用 成功创建\l。以下是文件 create.py 的代码,它创建一个包含两个表的数据库:

import os

from flask import Flask, render_template, request
from models import *

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://shammun:my_password@localhost:5432/test_database.db' 
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# db = SQLAlchemy()
db.init_app(app)


def main():
    db.create_all()

if __name__ == "__main__":
    with app.app_context():
        main()
Run Code Online (Sandbox Code Playgroud)

这个文件create.py导入了model.py,生成了两个表,其代码如下:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Flight(db.Model):
    __tablename__ = "flights"
    id = db.Column(db.Integer, primary_key=True)
    origin = db.Column(db.String, nullable=False)
    destination = db.Column(db.String, nullable=False)
    duration = db.Column(db.Integer, nullable=False)


class Passenger(db.Model):
    __tablename__ = "passengers"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    flight_id = db.Column(db.Integer, db.ForeignKey("flights.id"), nullable=False)
Run Code Online (Sandbox Code Playgroud)

现在,在终端中运行文件 create.py 时,出现以下错误:

sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)致命:数据库“test_database.db”不存在

实际上,这几乎与我一个月前在这篇文章db.create_all() does not create a database 中提出的问题相同。唯一的区别是我问了错误的问题,数据库没有创建。实际上问题是为什么找不到数据库以及为什么会抛出错误。由于这个问题已经结束,并且我已经尝试了很长时间来解决它,但找不到任何解决方案,所以我再次问几乎相同的问题。如果有人能帮助我摆脱长期陷入的瓶颈,我将不胜感激。

Pra*_*149 5

使用此命令检查您的 postgres 正在运行哪个端口,\conninfo 因为我怀疑您的 PostgreSQL 数据库正在某个不同的端口上运行。

PostgreSQL 的默认端口是 5432,但如果它已经被其他应用程序占用,那么它会尝试下一个空端口并开始在 5433 上运行

因此,在 SQLALCHEMY_DATABASE_URI 的应用程序配置变量中,尝试将 5432 更改为 5433,看看它是否有效。


编辑1:

尝试.db从数据库名称中删除test_database.db,然后输入test_database

改变这个:

app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://shammun:my_password@localhost:5432/test_database.db' 
Run Code Online (Sandbox Code Playgroud)

对此:

app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://shammun:my_password@localhost:5432/test_database' 
Run Code Online (Sandbox Code Playgroud)