title: Dynamic database connection Flask-SQLAlchemy
body: <p>i need to connect two database. the default database is fixed but the other one is dynamic, its based on URL.</p>
  
  <p>for example if url is : yourapp.myweb.com then second database name will be <strong>yourapp</strong> </p>
  
  <p>i try connect database into <strong>init</strong>.py but its show me following error</p>
  
  <pre><code>builtins.AssertionError
  AssertionError: A setup function was called after the first request was handled.  This usually indicates a bug in the application where a module was not imported and decorators or other functionality was called too late.
  To fix this make sure to import all your view modules, database models and everything related at a central place before the application starts serving requests.
  </code></pre>
  
  <p>here is my <strong>init</strong>.py</p>
  
  <pre><code>from flask import Flask,session
  from flask_sqlalchemy import SQLAlchemy
  import os
  app = Flask(__name__,static_url_path='/static')
  
  #  Database Connection
  database = request.url.split("/")[2].split(".")[0]
  app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:root@localhost/main_database"
  app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
  app.config['SQLALCHEMY_BINDS'] = {
      'user_db': 'mysql+pymysql://root:root@localhost/database_'+str(database), #dynamic Connection
  }
  db = SQLAlchemy(app)
  db.create_all()
  db.create_all(bind=['user_db'])
  # db.init_app(app)
  
  from . import views
  </code></pre>
  
  <p>here is the viwe.py</p>
  
  <pre><code>@app.route('/login', methods = ['GET'])
  def index():
      try:
          from .model import Users
          # Some Code
      except Exception as e:
          raise e
          # return "Failed to login ! Please try again."
  </code></pre>
  
  <p>here is the model.py</p>
  
  <pre><code>from application import db
  class Users(db.Model):
      __bind_key__ = 'user_db'
      __tablename__ = 'users'
      id = db.Column(db.Integer, primary_key = True)
      email = db.Column(db.String(50))
      name = db.Column(db.String(50))
      password = db.Column(db.String())
  
      def __repr__(self):
          return '&lt;User %r&gt;' % self.name
  </code></pre>