我在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
是我的用户,不是数据库名称。由于我没有使用烧瓶的sqlalchemy,我还没有找到一个人与同一个人打交道
我尝试销毁我的插件数据库,并在heroku上创建了独立的postgres数据库 - 同样的错误。
SQLAlchemy不接受heroku的URL的不同之处是什么?有没有办法使用psycopg2建立连接并将其传递给SQLAlchemy?
答案 0 :(得分:1)
旧问题,但答案似乎是database_exists
和create_database
在引擎网址以postgresql
开头时有特殊情况代码,但如果网址仅以{{{}开头1}},这些功能将失败。但是,SQLAlchemy通常适用于两种变体。
因此,解决方案是确保数据库网址以postgres
而不是postgresql://
开头。
答案 1 :(得分:0)
错误实际上是由
引起的 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")
答案 2 :(得分:0)
所以我遇到了同样的错误,经过多次检查后发现DATABASE_URL
中有空格。就像DATABASE_URL="url<space>"
。
删除空格后,我的代码运行得非常好。