Reputation: 25
I have following setup:
app.py
from app.__init__ import create_app
app=create_app()
if __name__ == "__main__":
app.run()
init.py
from flask import Flask
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy
from flask_mysqldb import MySQL
db = SQLAlchemy()
mysql = MySQL()
def create_app():
app = Flask(__name__)
app.config.from_object(__name__+'.ConfigClass')
app.config['MYSQL_HOST'] = 'hostname'
app.config['MYSQL_USER'] = 'username'
app.config['MYSQL_PASSWORD'] = 'userpwd'
app.config['MYSQL_DB'] = 'testdb'
db.app = app
db.init_app(app)
mysql.init_app(app)
login_manager = LoginManager()
login_manager.session_protection = "strong"
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
# blueprint for auth routes in our app
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint)
# blueprint for non-auth parts of app
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
# blueprint for element parts of app
from .element import element as element_blueprint
app.register_blueprint(element_blueprint)
from .dbase import dbase as element_blueprint
app.register_blueprint(element_blueprint)
# blueprint for element parts of app
from .dbase import User
@login_manager.user_loader
def load_user(username):
return User.query.filter_by(ID=int(username)).first()
return app
element.py
from flask import Blueprint, current_app
from flask_login import login_required,current_user
from .dbase import LeadQuery
from . import mysql
from . import db
element=Blueprint('element',__name__)
...
...
def add_query(row):
print(row)
lead = LeadQuery(... vars ...)
)
db.session.add(lead)
db.session.commit()
return 'SUCCESS', 'SUCCESS'
This was working fine until I upgraded the Flask-SQLAlchemy to 3.0.5
Now it's giving error in element.py add_query:
RuntimeError: The current Flask app is not registered with this 'SQLAlchemy' instance. Did you forget to call 'init_app', or did you create multiple 'SQLAlchemy' instances?
Tried followings but it didn't worked:
kept 'app' variable in init and used while initiating failed because create_app was giving error in .dbase initialization
in add_query initialize separate db variable it gave error:
RuntimeError: A 'SQLAlchemy' instance has already been registered on this Flask app. Import and use that instance instead.
dbase.py
from flask import Blueprint
dbase = Blueprint('dbase', __name__)
from . import db
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
# Define the User data-model.
class User(UserMixin,db.Model):
__tablename__ = 'USERS'
ID = db.Column(db.Integer, primary_key=True)
STATUS = db.Column('STATUS', db.Text, nullable=False, server_default='ACTIVE')
MOBILE = db.Column('MOBILE', db.Integer(), nullable=False, server_default='')
PASSWORD = db.Column(db.String(255), nullable=False, server_default='')
# User information
FNAME = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
LNAME = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
# Define the relationship to Role via UserRoles
ROLES = db.relationship('Role', secondary='USER_ROLES')
def check_password(self, password):
return check_password_hash(self.PASSWORD, password)
def get_MF(self):
return str(self.MF)
def get_id(self):
return str(self.ID)
def get_name(self):
return str(self.FNAME)
def get_role(self):
return str(self.ROLES[0].ROLE)
def __repr__(self):
return '<User %r>' % self.FNAME
Flask: 2.3.2 SQLAlchemy: 2.0.16 PyMySQL: 1.0.2 Flask-SQLAlchemy: 3.0.5
Would you please suggest what could be the solution?
Upvotes: 0
Views: 1092
Reputation: 25
Used the following packages (downgraded) to resolve the issue:
sqlalchemy==1.4.48
flask-sqlalchemy==2.5.1
Upvotes: 0