Heroku SQLAlchemy 数据库不存在

Heroku SQLAlchemy database does not exist

我是 运行 heroku 上的 python 3.5 工人。

self.engine = create_engine(os.environ.get("DATABASE_URL"))

我的代码在本地运行,通过了 Travis CI,但在 heroku 上出现错误 - OperationalError: (psycopg2.OperationalError) FATAL: database "easnjeezqhcycd" does not exist

easnjeezqhcycd 是我的用户,不是数据库名。由于我没有使用 flask 的 sqlalchemy,所以我还没有发现一个人与同一个人打交道

我尝试破坏我的插件数据库并在 heroku 上创建独立的 postgres 数据库 - 同样的错误。

SQLAlchemy 不接受 heroku 的 URL 有何不同?有没有办法使用 psycopg2 建立连接并将其传递给 SQLAlchemy?

错误实际上是由

引起的
if not database_exists(self.engine.url):
    logging.info("Database not found")
    create_database(self.engine.url)
    logging.info("Database created")

所以我刚刚在 Heroku 上创建了配置变量 ON_HEROKU 并将其包装在 if 语句

if "ON_HEROKU" not in os.environ:
    if not database_exists(self.engine.url):
        logging.info("Database not found")
        create_database(self.engine.url)
        logging.info("Database created")

老问题,但答案似乎是 database_existscreate_database 有特殊情况代码,用于当引擎 URL 以 postgresql 启动时,但如果URL 仅以 postgres 开头,这些函数将失败。但是,SQLAlchemy 通常可以很好地处理这两种变体。

所以解决方案是确保数据库 URL 以 postgresql:// 开头,而不是 postgres://

所以我遇到了同样的错误,在检查了几次之后我发现我在我的 DATABASE_URL 中给出了尾随 space。这就像 DATABASE_URL="url<space>".

删除 space 后,我的代码运行得非常好。