I ran into the same issue and was not sure why things have to work this way. However, according to the flask-sqlalchemy doc (see the last sentence of the section) it uses the Application Object's instance_path attribute, which defaults to instance if not specified, but then I don't know how that becomes var/app-instance in my flask app????
It is hard for someone new to flask/flask-sqlalchemy to know all the config options and how they interact with each other. Having a config system that adds an absolute path into sqlite:///filename.db path is not obvious and unexpected.