因此,作为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一起使用数据库,所以我完全是新手,也许我在做其他错误?我感谢你们能提供的所有帮助。预先感谢
答案 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