sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)严重:数据库不存在

时间:2020-05-17 19:55:02

标签: python flask sqlalchemy 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()

此文件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)

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

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

实际上,这与我一个月前在本帖子db.create_all() doesn't create a database中提出的问题几乎相同。唯一的区别是我问了一个错误的问题,即未创建数据库。实际上,问题是为什么找不到数据库以及为什么会引发错误。由于这个问题已经解决,并且我已经为解决该问题进行了很长时间的尝试,并且找不到任何解决方案,因此我再次提出几乎相同的问题。如果有人可以帮助我摆脱长期困扰我的瓶颈,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用此命令\conninfo检查postgres在哪个端口上运行 因为我怀疑您的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' 

对此:

app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://shammun:my_password@localhost:5432/test_database' 
相关问题