Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

354
Views
La recuperación de datos de RDS da AttributeError: el objeto 'sqlalchemy.cimmutabledict.immutabledict' no tiene el atributo 'setdefault'

Me gustaría recuperar datos de usuario de RDS siempre que se llame al extremo de la API {{url}}/api/users/login para autenticar a los usuarios; sin embargo, actualmente tengo problemas para recuperar datos de RDS.

Rastreo de pila de errores

Este es el stacktrace completo del error: ingrese la descripción de la imagen aquí

Versiones actuales del paquete

 Flask==1.1.2 Flask-Cors==3.0.10 flask-marshmallow==0.14.0 Flask-Migrate==2.5.3 Flask-RESTful==0.3.8 Flask-SQLAlchemy==2.4.4 marshmallow==3.10.0 marshmallow-sqlalchemy==0.24.1 SQLAlchemy==1.4.0b1 python==3.7

Mis intentos de resolver el problema.

Algunas cosas que he intentado resolver el problema pero sin éxito son:

  • usando el conector pymysql en lugar de mysqlconnector
  • degradar matraz-malvavisco == 0.11.0
  • malvavisco degradado == 3.6.1
  • malvavisco degradado-sqlalchemy == 0.23.1

Más información sobre la configuración de mi aplicación

He dockerizado mi aplicación y esta es mi configuración actual:

app.py

 from flask_marshmallow import Marshmallow from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy from flask_jwt_extended import JWTManager db = SQLAlchemy() ma = Marshmallow() migrate = Migrate() def register_extensions(app: Flask) -> None: db.init_app(app) migrate.init_app(app, db) ma.init_app(app) def create_application() -> Flask: app: Flask = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://{DB_USER}:{DB_PASSWORD}@{DB_INSTANCE}:{DB_PORT}" app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False register_extensions(app) app.register_blueprint(users_urls.mod, url_prefix=f"/{BEP_PREFIX}/users") return app app = create_application() CORS(app)

modelos.py

 class Accounts(db.Model): __tablename__ = 'Accounts' username = db.Column(db.String(100), primary_key=True) password = db.Column(db.String(256), nullable=False) email = db.Column(db.String(255), nullable=False) personnelID = db.Column(db.String(255), nullable=False) userType = db.Column(db.String(45), nullable=False)

servicio.py

 class UserService(Service): __model__ = Accounts def get(self, username): return Accounts.query.filter_by(username=username).first() user_service = UserService()

vistas.py

 from bep.users.services import user_service class UserLogin(Resource): def post(self): data = request.get_json() try: userData = user_service.get("test") except Exception: error_str = traceback.format_exc() logger.error("This prints the stack", exc_info=True) return UserServiceError.to_response(error=error_str, comments="Something went wrong while logging in")
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El problema es un problema conocido en el frasco-sqlalchemy, causado por cambios en SQLAchemy 1.4. Flask-sqlalchemy intenta modificar la URL del motor SQLALchemy, pero estas URL son inmutables en SQLAlchemy 1.4.

El problema se solucionó en Flask-SQLAlchemy 2.5+ (registro de cambios ).

Si no es posible actualizar Flask-SQLAlchemy, el problema se puede solucionar especificando la versión de SQLAlchemy pasada a pip , ya sea a través de la línea de comando

 pip install --upgrade 'SQLAlchemy<1.4'

o en requisitos.txt

 SQLAlchemy<1.4

SQLAlchemy 1.4 se lanzó de forma general el 15 de marzo de 2021.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!