【发布时间】:2019-12-26 22:38:27
【问题描述】:
我用 Flask 构建了一个应用程序,没有使用 SQLAlchemy(所以我没有得到 ORM,这对我来说透明度和理解力都比较低),所以只使用 SQLite 的普通 SQL。
现在我想在线发布它(现在我想用免费的 Heroku 测试它),我发现的所有教程似乎都使用 SQLAlchemy 来使用 PostgreSQL 而不是 SQLite。
我还使用了包含所有代码的schema.sql 文件来创建使用命令flask init-db 启动的架构(CREATE TABLE user 等)。
我也有点担心,我需要更改更多的代码,而不仅仅是数据库链接。
使用 Flask 教程中的 db.py 代码,我将连接 URL 更改为使用 Heroku 给我的那个。
def get_db():
if 'db' not in g:
if os.environ.get('DATABASE_URL') is None:
g.db = sqlite3.connect(
current_app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES
)
g.db.row_factory = sqlite3.Row
else:
DATABASE_URL = os.environ['DATABASE_URL']
g.db = psycopg2.connect(DATABASE_URL, sslmode='require')
return g.db
通过初始提交将代码推送到 Heroku 时,在我网站的 URL 上,我收到“应用程序错误”消息。日志说:
2019-08-21T15:12:50.333541+00:00 app[init.1]: Usage: flask [OPTIONS] COMMAND [ARGS]...
2019-08-21T15:12:50.333564+00:00 app[init.1]: Try "flask --help" for help.
2019-08-21T15:12:50.333567+00:00 app[init.1]:
2019-08-21T15:12:50.333642+00:00 app[init.1]: Error: No such command "init_db".
2019-08-21T15:12:50.434989+00:00 heroku[init.1]: Process exited with status 2
2019-08-21T15:12:54.909027+00:00 heroku[init.1]: Starting process with command `FLASK_APP=myapp flask init_db`
2019-08-21T15:12:55.504819+00:00 heroku[init.1]: State changed from starting to up
2019-08-21T15:12:57.997833+00:00 heroku[init.1]: State changed from up to crashed
2019-08-21T15:12:57.888599+00:00 app[init.1]: Usage: flask [OPTIONS] COMMAND [ARGS]...
2019-08-21T15:12:57.888627+00:00 app[init.1]: Try "flask --help" for help.
2019-08-21T15:12:57.888630+00:00 app[init.1]:
2019-08-21T15:12:57.888639+00:00 app[init.1]: Error: No such command "init_db".
2019-08-21T15:12:57.978596+00:00 heroku[init.1]: Process exited with status 2
那么我是否可以在不使用 SQLAlchemy 或至少不使用 ORM 的情况下轻松地将 Flask 应用程序部署到 Heroku,以便我可以使用我的普通 SQL 命令?
【问题讨论】:
标签: python database postgresql heroku flask