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_exists
和 create_database
有特殊情况代码,用于当引擎 URL 以 postgresql
启动时,但如果URL 仅以 postgres
开头,这些函数将失败。但是,SQLAlchemy 通常可以很好地处理这两种变体。
所以解决方案是确保数据库 URL 以 postgresql://
开头,而不是 postgres://
。
所以我遇到了同样的错误,在检查了几次之后我发现我在我的 DATABASE_URL
中给出了尾随 space。这就像 DATABASE_URL="url<space>"
.
删除 space 后,我的代码运行得非常好。
我是 运行 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_exists
和 create_database
有特殊情况代码,用于当引擎 URL 以 postgresql
启动时,但如果URL 仅以 postgres
开头,这些函数将失败。但是,SQLAlchemy 通常可以很好地处理这两种变体。
所以解决方案是确保数据库 URL 以 postgresql://
开头,而不是 postgres://
。
所以我遇到了同样的错误,在检查了几次之后我发现我在我的 DATABASE_URL
中给出了尾随 space。这就像 DATABASE_URL="url<space>"
.
删除 space 后,我的代码运行得非常好。