Good question. Basically, the code you provided starts a db connection before each request. Each visited url is one request - including retrieved images or stylesheets -, so that's quite often. 
What to do? 
- This snippet might be a bit more efficient, but will still create a database at each request. You could check it out.  
- Its advisable to route directly to your statics. That will remove a lot of request when the database connection for sure is not required. There are some options to do this with flask itself - see this post. I personally use - flask + WSGI, and add this little script above the line- WSGIDaemonProcessin my- httpd.conffile.
 - Alias "/static/" "/home/user/webapps/flask_app/flask_app/static/"
<Directory "/home/user/webapps/flask_app/flask_app/static/">
      Require all granted
</Directory>
 
- Do all your views need the db? Otherwise only get the connection on the required views.  - from functools import wraps
from flask import g
def make_db_connection(func): 
    """ decorate views that need a database connection """
    @wraps(func)
    def decorated_function(*args, **kwargs):
         if 'db' not in g:
             g.db = connect_to_database()
         return func(*args, **kwargs)
     return decorated_function
@app.teardown_appcontext
def teardown_db():
    """ close if opened """
    db = g.pop('db', None)
    if db is not None:
        db.close()
 
- You can make a small - class/- APIaround your database and cache the most common request. Only works for- selectof course. See this pretty project.
 - class Database():
     @threaded_cached_property_with_ttl(ttl=60*60)  # in seconds 
     def some_popular_query():
          connection = MySQLdb.connect(host="localhost", user="", passwd="", db="")
          return connection.get_query()
 
Illustration
To illustrate, Let's say we have a simple website with template/main.html.
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"</script>
    <script src="static/style/test.css"></script>
</head>
<body> 
    {{message}}
    <img src="static/img/test.png' />
</body>
And index.py
 from flask import Flask
 app = Flask(__name__)
 @app.route('/')
 def hello_world():
     return render_template('index.html', message='Hello world')
With the flask site you describe, you will have one request for the page and template, another request for the stylesheet and another one for the images. That's 3 calls to your database!