Forums

sqlite3.OperationalError: unable to open database file

Hi Guys,

I'm getting the below exceptions/errors.

 **sqlite3.OperationalError: unable to open database file
**NO MATCH**
The above exception was the direct cause of the following exception:
**NO MATCH****
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/lib/python3.7/site-packages/flask_restful/__init__.py", line 480, in wrapper
    resp = resource(*args, **kwargs)
  File "/usr/lib/python3.7/site-packages/flask/views.py", line 88, in view
    return self.dispatch_request(*args, **kwargs)
  File "/usr/lib/python3.7/site-packages/flask_restful/__init__.py", line 595, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/home/collardesolate/mysite/resources/item.py", line 23, in post
    if ItemModel.find_by_name(name):
  File "/home/collardesolate/mysite/models/item.py", line 19, in find_by_name
    return ItemModel.query.filter_by(name=name).first()
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 2888, in first
    ret = list(self[0:1])
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 2680, in __getitem__
    return list(res)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 2988, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3009, in _execute_and_instances
    close_with_result=True)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3018, in _get_bind_args
    **kw
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3000, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1035, in connection
    execution_options=execution_options)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1040, in _connection_for_bind
    engine, execution_options)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 409, in _connection_for_bind
    conn = bind.contextual_connect()
  File "/usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2123, in contextual_connect
    self._wrap_pool_connect(self.pool.connect, None),
  File "/usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2162, in _wrap_pool_connect
    e, dialect, self)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception_noconnection
    exc_info
  File "/usr/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 265, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 248, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2158, in _wrap_pool_connect
    return fn()
  File "/usr/lib/python3.7/site-packages/sqlalchemy/pool.py", line 403, in connect
    return _ConnectionFairy._checkout(self)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/pool.py", line 791, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/pool.py", line 532, in checkout
    rec = pool._do_get()
  File "/usr/lib/python3.7/site-packages/sqlalchemy/pool.py", line 1287, in _do_get
    return self._create_connection()
  File "/usr/lib/python3.7/site-packages/sqlalchemy/pool.py", line 350, in _create_connection
    return _ConnectionRecord(self)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/pool.py", line 477, in __init__
    self.__connect(first_connect_check=True)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/pool.py", line 674, in __connect
    connection = pool._invoke_creator(self)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/engine/strategies.py", line 106, in connect
    return dialect.connect(*cargs, **cparams)
  File "/usr/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 412, in connect
    return self.dbapi.connect(*cargs, **cparams)
**sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file (Background on this error at: http://sqlalche.me/e/e3q8)**

This is my app code:

from flask import Flask
from flask_restful import Api
from flask_jwt import JWT

from security import authenticate, identity
from resources.user import UserRegister
from resources.item import Item, ItemList

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///home/collardesolate/mysite/data.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.secret_key = "****"
api = Api(app)

jwt = JWT(app, authenticate, identity)

api.add_resource(Item, "/item/<string:name>")
api.add_resource(ItemList, "/items")
api.add_resource(UserRegister, "/register")

from db import db
db.init_app(app)

if __name__ == "__main__":
    app.run(debug=True)

Now I'm aware that code within if name == "main": won't run on Pythonanywhere so i deliberately moved

db import db db.init_app(app)

to above it, outside that call and it still isn't working (threw up this error message in the title). as you can see, I have also put the full file path to my DB file.

PythonAnywhere staff feel free to inspect my files. I have played with this for an hour, looked on Google etc and nothing I did worked.

Thank you in advance!

Did you reload your webapp and also check the most recent errors?

Yes the error log above is the most recent error. Only occurs on POST requests to the API. GET, AUTH etc all work fine

It looks like your site is no longer generating errors -- did you work out what the problem was?

Hi, yeah I moved some code around slightly and completely removed the retched name ==main thing. Also added def: create_tables()

from flask import Flask
from flask_restful import Api
from flask_jwt import JWT

from security import authenticate, identity
from resources.user import UserRegister
from resources.item import Item, ItemList
from resources.store import Store, StoreList

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['PROPAGATE_EXCEPTIONS'] = True
app.secret_key = 'jose'
api = Api(app)

from db import db
db.init_app(app)

@app.before_first_request
def create_tables():
    db.create_all()


jwt = JWT(app, authenticate, identity)  # /auth

api.add_resource(Store, '/store/<string:name>')
api.add_resource(StoreList, '/stores')
api.add_resource(Item, '/item/<string:name>')
api.add_resource(ItemList, '/items')
api.add_resource(UserRegister, '/register')

OK, glad you worked it out! At a guess, it was moving the db.init_app up above the JWT initialization that fixed it.