J'ai appris le cadre d'application Web Flask et je me sens assez à l'aise avec cela. J'ai déjà construit une application simple à faire qui a parfaitement fonctionné. Je travaillais sur le même projet, mais essayant de l'implémenter en utilisant TDD. J'ai rencontré une erreur avec la base de données que je n'ai jamais vue auparavant et je ne sais pas comment corriger.
Lorsque j'examine mon code, je ne vois aucun problème. Il semble également identique au code du projet de travail, donc je ne sais vraiment pas ce que je fais de mal.
p> mon fichier config.py:
from project import db, login_manager from flask_login import UserMixin from werkzeug.security import generate_password_hash, check_password_hash class User(db.Model, UserMixin): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String, unique=True) hashed_password = db.Column(db.String) def __init__(self, username, password): self.username = username self.hashed_password = generate_password_hash(password) def is_password_valid(self, password): return check_password_hash(self.hashed_password, password) def __repr__(self): return '<User {}>'.format(self.id) @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id))
6 Réponses :
vient de faire face à la même erreur exacte. Il s'avère que j'ai eu la mauvaise bibliothèque Flask-Sqlalchemy installée. Je l'ai installé à l'aide de conda au lieu de PIP, et Conda a installé celle appropriée pour mon système d'exploitation et mon environnement.
J'ai résolu ce problème en remplaçant Application_Driver_Hacks dans la classe SQLALCHEMY.
Dans cette nouvelle méthode, j'ai supprimé cette ligne: sa_url.database = os.path.join (app.root_path, sa_url.database)
. J'ai copié le reste de la méthode.
class MySQLAlchemy(SQLAlchemy): def apply_driver_hacks(self, app, sa_url, options): ...
La méthode peut être trouvée ici . Le correctif que j'ai décrit ne devrait être que temporaire. Le problème peut être résolu dans les versions plus récentes de Flask-Sqlalchemy.
Désolé, où puis-je trouver cette méthode?
Si vous vivez cela, la mise à niveau de Flask-Sqlalchemy à> = 2.5 devrait résoudre le problème par https://github.com/pallets/flask-sqlalchemy/issues/910#issuecomment-802098285 .
épingler sqlalchemy à ~ 1,3 ne devrait plus être nécessaire.
J'ai rencontré ce problème un peu plus tôt, mais je pense que j'ai compris ce qui se passe.
Sqlalchemy est automatiquement installé comme une dépendance pour Flask-Sqlalchemy et sa dernière version (1.4.0) introduit le changement de rupture suivant:
L'objet URL est maintenant un tuple nommé immuable. Pour modifier un objet URL, utilisez la méthode url.set () pour produire un nouvel objet URL.
J'ai pu résoudre ce problème en installant simplement la version précédente de SQL Alchemy (1.3.23).
Corrections de suivi des problèmes GitHub pertinents: github.com/pallets/flask-sqlalchemy/issues/910 < / a>
Tu sauas ma journée
La mise à niveau du flacon-sqlalchemy à> = 2,5 était la solution. Et ajoutant également '' 'sqlalchemy_database_uri =' sqlite: ///site2.db '#instead d'os.environ.get (' sqlalchemy_database_uri ')' '' 'dans le fichier config.py. Quel cauchemard!
Vérifiez que ce problème vous affecte en exécutant Vous devez constater que la version actuelle de Sqlalchemy est 1.4.0 . J'ai trouvé que la solution la plus rapide pour l'instant consiste à revenir manuellement à une version précédente de sqlalchemy: si vous venez de revenir à la version précédente et cela fonctionne alors maintenant est un Beaucoup de temps pour épingler vos versions: pip freeze > requirements.txt
pip install SQLAlchemy==1.3.23
J'ai pu corriger ceci en épinglant mon SQL-Alchemy
Version à moins de 1.4.0
. Des exemples similaires sont répertoriés ci-dessus. Vous trouverez ci-dessous les étapes que j'ai faites pour résoudre ce problème jusqu'à ce qu'un correctif se produise.
GÉLÉZER VOS PACKAGES
pip install -r requirements.txt
Mettez à jour votre sqlalchemy
dans vos exigences. txt
SQLAlchemy<1.4.0
Réinstallez les packages
La rétrogradation de Sqlalchemy à 1.13.23 devrait être bien, et la mise à niveau de Flask-Sqlalchemy vers 2.5.1 résoudra également le problème.
Oui, @dalianglyu est correct flask-sqlalchemy
a une mise à jour qui résout ce problème. github.com/pallets/flask-sqlalchemy/releases pour plus d'informations.
confirmant Réponse de npburns224 / supershoot :
Mise à niveau Flask-Sqlalchemy
(et donc sa dépendance sqlalchemy
) à la dernière version a fait l'astuce pour moi.
pip install --upgrade flask-sqlalchemy
J'exécute maintenant FLASK-SQLALCHEMY 2.5.1
et SQLALCHEMY 1.4.3
avec succès.
J'ai travaillé sur un projet depuis quelques jours et j'ai rencontré cette même erreur exacte, même si je n'ai modifié rien d'important / pertinent. Curieusement, je rencontre maintenant le même problème lorsque je crée un projet de test frais et totalement séparé qui me lance un peu de boucle.
J'ai soudainement le même problème sans rien changer. Peut-être qu'une dépendance à la bibliothèque a été modifiée?