Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite3.OperationalError)Heroku上没有这样的表_Python_Heroku_Flask_Sqlalchemy - Fatal编程技术网

Python sqlite3.OperationalError)Heroku上没有这样的表

Python sqlite3.OperationalError)Heroku上没有这样的表,python,heroku,flask,sqlalchemy,Python,Heroku,Flask,Sqlalchemy,我正在使用(一个烧瓶样板)作为一个项目的基础。项目在windows上按预期本地运行 我不需要对代码的生产版本进行任何db更改,因此为了简单起见,我决定在本地和heroku上使用sqllite。考虑到这一点,我将中的生产类更改为: 当我部署代码并尝试登录时,我看到一个500错误。日志显示: 2019-05-15T21:47:28.749283+00:00 app[web.1]: raise value.with_traceback(tb) 2019-05-15T21:47:28.74928

我正在使用(一个烧瓶样板)作为一个项目的基础。项目在windows上按预期本地运行

我不需要对代码的生产版本进行任何db更改,因此为了简单起见,我决定在本地和heroku上使用sqllite。考虑到这一点,我将中的生产类更改为:

当我部署代码并尝试登录时,我看到一个500错误。日志显示:

2019-05-15T21:47:28.749283+00:00 app[web.1]:     raise value.with_traceback(tb)
2019-05-15T21:47:28.749284+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
2019-05-15T21:47:28.749286+00:00 app[web.1]:     context)
2019-05-15T21:47:28.749287+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
2019-05-15T21:47:28.749289+00:00 app[web.1]:     cursor.execute(statement, parameters)
2019-05-15T21:47:28.749301+00:00 app[web.1]: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users [SQL: 'SELECT users.id AS users_id, users.confirmed AS users_confirmed, users.first_name AS users_first_name, users.last_name AS users_last_name, users.email AS users_email, users.password_hash AS users_password_hash, users.role_id AS users_role_id \nFROM users \nWHERE users.email = ?\n LIMIT ? OFFSET ?'] [parameters: ('me@test.com', 1, 0)]
Disconnected from log stream. There may be events happening that you do not see here! Attempting to reconnect...
2019-05-15T21:47:28.749277+00:00 app[web.1]:     exc_info
2019-05-15T21:47:28.749278+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
2019-05-15T21:47:28.749280+00:00 app[web.1]:     reraise(type(exception), exception, tb=exc_tb, cause=cause)
2019-05-15T21:47:28.749281+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
2019-05-15T21:47:28.749283+00:00 app[web.1]:     raise value.with_traceback(tb)
2019-05-15T21:47:28.749284+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
2019-05-15T21:47:28.749286+00:00 app[web.1]:     context)
2019-05-15T21:47:28.749287+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
2019-05-15T21:47:28.749289+00:00 app[web.1]:     cursor.execute(statement, parameters)
2019-05-15T21:47:28.749301+00:00 app[web.1]: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users [SQL: 'SELECT users.id AS users_id, users.confirmed AS users_confirmed, users.first_name AS users_first_name, users.last_name AS users_last_name, users.email AS users_email, users.password_hash AS users_password_hash, users.role_id AS users_role_id \nFROM users \nWHERE users.email = ?\n LIMIT ? OFFSET ?'] [parameters: ('me@test.com', 1, 0)]
看来炼金术找不到桌子了。我想知道这句话:

SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
然后是访问扁平文件数据库(data-dev.sqlite)的错误方式。

。它的文件系统。下次dyno重新启动时,您对文件所做的任何更改都将丢失。这(每天至少一次)

原始代码做了正确的事情:

SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
如果设置了
DATABASE\u URL
环境变量,它将用于连接数据库。因为Heroku应该将
数据库的URL
变量设置为其连接字符串

如果您真的必须使用SQLite(我强烈建议不要这样),请将其视为只读。您必须在本地开发机器上提交数据库文件,并将该提交推送到Heroku。即使这样,它也可能无法正常工作。赫罗库出了名。

。它的文件系统。下次dyno重新启动时,您对文件所做的任何更改都将丢失。这(每天至少一次)

原始代码做了正确的事情:

SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
如果设置了
DATABASE\u URL
环境变量,它将用于连接数据库。因为Heroku应该将
数据库的URL
变量设置为其连接字符串


如果您真的必须使用SQLite(我强烈建议不要这样),请将其视为只读。您必须在本地开发机器上提交数据库文件,并将该提交推送到Heroku。即使这样,它也可能无法正常工作。赫罗库出了名。

非常感谢!正如您所说,我通常在heroku上使用postgres,但是这个项目需要一个只读数据存储。@user61629,没有什么可以阻止您将用户postgres作为只读数据存储:-)。你甚至可以通过或强制执行。谢谢,我会看一看。非常感谢!正如您所说,我通常在heroku上使用postgres,但是这个项目需要一个只读数据存储。@user61629,没有什么可以阻止您将用户postgres作为只读数据存储:-)。你甚至可以通过或强制执行。谢谢,我会看一看。