tôi cần kết nối hai cơ sở dữ liệu. cơ sở dữ liệu mặc định là cố định nhưng cơ sở dữ liệu khác là động, dựa trên URL.Kết nối cơ sở dữ liệu động Flask-SQLAlchemy
ví dụ nếu url là: yourapp.myweb.com sau đó tên cơ sở dữ liệu thứ hai sẽ yourapp
tôi cố gắng kết nối cơ sở dữ liệu vào init py nhưng nó chỉ cho tôi lỗi sau
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.
ở đây là tôi 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:[email protected]/main_database"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_BINDS'] = {
'user_db': 'mysql+pymysql://root:[email protected]/database_'+str(database), #dynamic Connection
}
db = SQLAlchemy(app)
db.create_all()
db.create_all(bind=['user_db'])
# db.init_app(app)
from . import views
đây là 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."
đây là 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
tôi nghĩ khi tôi khởi động ứng dụng, nó không có bất kỳ yêu cầu nào. Vì vậy, có thể là .. –
nếu có vấn đề ở trên thì tệp .py nào là tốt nhất để kết nối cơ sở dữ liệu? –
Thử đặt 'từ .model import Users' ở cấp cao nhất của mô-đun. – Fian