将Heroku数据库连接到SQLAlchemy

时间:2018-09-27 19:20:15

标签: python postgresql heroku flask sqlalchemy

因此,作为Web编程MOOC的一部分,我必须使用Python和SQLalchemy连接到Heroku上托管的PostgreSQL数据库。我花了很多时间试图这样做,但没有成功。我的主要问题是我无法连接到数据库,因为每次尝试运行脚本来更新或仅检查数据库时,我都会得到“服务器是否在主机“ ec2-174- 129-35-61.compute-1.amazonaws.com”(174.129.35.61)并接受 在端口5432上的TCP / IP连接?” 在命令提示符下。

我已经做了大量研究试图找出答案,似乎我数据库的URI可能未设置为接受公共连接。但是我尝试设置ssl = require,但仍然无法解决问题。也许我做错了吗?

我开始认为也许我的代码做错了,或者我应该尝试通过Heroku的CLI而不是命令提示符进行连接,但是我不确定。这是我的简单测试代码:

import os
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

if not os.getenv("DATABASE_URL"):
    raise RuntimeError("DATABASE_URL is not set")

engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))

db.execute("INSERT INTO books VALUES (1, 1, 1, 1)")
db.commit()

我在命令提示符下将DATABASE_URL环境变量设置为数据库的URI,但也许我做错了吗?我还尝试仅在代码本身中使用URI,但仍然无法使其正常工作。

这是我第一次与Heroku一起使用数据库,所以我完全是新手,也许我在做其他错误?我感谢你们能提供的所有帮助。预先感谢

1 个答案:

答案 0 :(得分:0)

1)检查,您是否复制了所有链接,包括postgres://

2)也许您在设置DATABASE_URL时犯了一个错误。因此,尝试将您的URL直接添加到脚本中:

import os
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

engine = "postgres://ennjrjkrfsb____all_code_of_key_.....___compute.amazonaws.com:5432/ddo7541ka3hio7"
db = scoped_session(sessionmaker(bind=engine))
db.execute("INSERT INTO books VALUES (1, 1, 1, 1)")
db.commit()

3)如果您使用的是Linux,请尝试使用命令psql postgres://ennjrjkrfsb____all_code_of_key_.....___compute.amazonaws.com:5432/ddo7541ka3hio7

打开数据库

4)尝试通过其他Internet提供商(可能是您的提供商或办公室管理员对Heroku的受限访问)以任何方式访问您的数据库

更新:尝试使用带解释器(基于Linux)的免费在线IDE,例如https://cs50.io-从此站点可以访问Heroku postgres