Python 如何在不使用SQLAlchemy的情况下将Flask应用程序部署到Heroku?

Python 如何在不使用SQLAlchemy的情况下将Flask应用程序部署到Heroku?,python,database,postgresql,heroku,flask,Python,Database,Postgresql,Heroku,Flask,我已经用Flask构建了一个应用程序,没有使用SQLAlchemy,所以我不会得到ORM,因为ORM对我来说透明度和理解力都比较低,所以只需使用SQLite的纯SQL即可 现在我想在线发布,现在我想用一个免费的Heroku来测试它,我找到的所有教程似乎都使用了SQLAlchemy,以便能够使用PostgreSQL而不是SQLite 我还使用一个schema.sql文件,其中包含创建schema create TABLE user等的所有代码,该文件是通过命令flask init db启动的 我也

我已经用Flask构建了一个应用程序,没有使用SQLAlchemy,所以我不会得到ORM,因为ORM对我来说透明度和理解力都比较低,所以只需使用SQLite的纯SQL即可

现在我想在线发布,现在我想用一个免费的Heroku来测试它,我找到的所有教程似乎都使用了SQLAlchemy,以便能够使用PostgreSQL而不是SQLite

我还使用一个schema.sql文件,其中包含创建schema create TABLE user等的所有代码,该文件是通过命令flask init db启动的

我也有点担心,除了数据库链接,我还需要修改更多的代码

使用Flask教程中的db.py代码,我更改了连接URL以使用Heroku给我的URL

def get_db: 如果“db”不在g中: 如果os.environ.get'DATABASE_URL'为无: g、 db=sqlite3.connect 当前_app.config['DATABASE'], detect\u types=sqlite3.PARSE\u DECLTYPES g、 db.row_factory=sqlite3.row 其他: DATABASE\u URL=os.environ['DATABASE\u URL'] g、 db=psycopg2.connectDATABASE_URL,sslmode='require' 返回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的情况下轻松地将Flask应用程序部署到Heroku,或者至少不使用ORM,这样我就可以使用简单的SQL命令了吗?

你把SQLAlchemy和PostgreSQL混为一谈了

SQLAlchemy提供

一个统一的、相对低级的接口,用于通过SQLAlchemy Core处理许多不同的数据库后端,以及 可选的ORM 它可以与PostgreSQL、SQLite等一起使用

PostgreSQL是一个关系数据库管理系统,很像SQLite

您可以直接使用Postgres,例如与psycopg2或类似SQLAlchemy的东西一起使用

无论是否使用SQLAlchemy,您都不能在Heroku上使用SQLite。SQLite将其数据保存在文件系统上的一个文件中,而这并不能很好地发挥作用

要使用没有SQLAlchemy的Postgres,只需

如果将psycopg2添加到依赖项,则应自动设置加载项, 并通过DATABASE_URL环境变量中给定的连接字符串连接到它。 我还使用一个schema.sql文件,其中包含创建schema create TABLE user等的所有代码,该文件是通过命令flask init db启动的

只要schema.sql是应用程序的一部分,您就应该能够执行以下操作

heroku run flask init-db
如果这不起作用,那么做类似的事情

cat schema.sql | heroku pg:psql
但就我个人而言,我首先要探究为什么heroku run没有做你想做的事

最后,我强烈建议在开发中也使用PostgreSQL

SQLite和PostgreSQL是不同的产品,它们的行为方式并不总是相同的。通过ORM或SQLAlchemy的核心可以实现某种程度的一致性,尽管我建议在任何地方都使用相同的数据库,但是如果您编写原始SQL,那么差异就变得更加重要