【发布时间】:2017-06-03 07:45:09
【问题描述】:
我需要连接两个数据库。默认数据库是固定的,但另一个是动态的,它基于 URL。
例如,如果 url 是:yourapp.myweb.com,那么第二个数据库名称将是 yourapp
我尝试将数据库连接到 init.py 但它显示以下错误
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.
这是我的 init.py
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
这里是 viwe.py
@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."
这里是model.py
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 '<User %r>' % self.name
【问题讨论】:
-
我认为当我启动我的应用程序时它没有任何 request.url 所以可能是..
-
如果有上述问题,那么哪个.py文件最好连接数据库?
-
尝试将
from .model import Users放在模块的顶层。 -
我试过了。这是行不通的。 ):
-
如果我使用 sqlite 而不是 mysql,该代码对我有用。我怀疑问题是您无法成功连接到数据库。您是否可能错过了Python3 port of pymysql?
标签: python-3.x flask sqlalchemy flask-sqlalchemy