使用flask_security时,flask_sqlalchemy对象没有属性add

时间:2017-10-07 03:03:38

标签: python flask flask-sqlalchemy flask-security

我正在尝试使用flask_security添加一些角色/用户,但在尝试使用SQLAlchemySessionUserDatastore创建用户时遇到此问题。所以我首先创建像guide

这样的user_datastore
db = SQLAlchemy(app)
user_datastore = SQLAlchemySessionUserDatastore(db, User, Role)
security = Security(app, user_datastore)
user_datastore.create_user(email='test', password='passowrd')

这是我偏离指南并尝试创建测试用户的地方。看起来db = SQLAlchemy(app)导致了我的问题。

    self.db.session.add(model)
AttributeError: 'SQLAlchemy' object has no attribute 'add'

3 个答案:

答案 0 :(得分:1)

因此,如果您按照https://pythonhosted.org/Flask-Security/quickstart.html#id2中的示例操作,则会注意到他们使用的是async Task SendResultAsync(CancellationToken cancellationToken) { try { await httpClient.SendAsync(form, cancellationToken); } catch (OperationCanceledException) { // perform your cleanup form.Dispose(); // rethrow exception so caller knows you’ve canceled. // DON’T “throw ex;” because that stomps on // the Exception.StackTrace property. throw; } } 。在达到这一点之前,如果你刚刚开始使用SQLAlchemySessionUserDatastore,那么你可能已经有了一个数据库会话。因此,当我将其缩小到SQLAlchemy没有flask_sqlalchemy属性的对象时,我尝试使用add。其中我用db session响应已经存在,现在我有2个会话。

长篇简短阅读一些文档,你应该使用sessionmaker代替!

答案 1 :(得分:1)

user_datastore = SQLAlchemySessionUserDatastore(db,User,Role)

上面这行可能是罪魁祸首。

我的解决方法如下: user_datastore = SQLAlchemySessionUserDatastore( db.session ,用户,角色)

答案 2 :(得分:1)

从这一行删除会话

user_datastore = SQLAlchemySessionUserDatastore(db, User, Role)

改为

user_datastore = SQLAlchemyUserDatastore(db, User, Role)

也进口

from flask_security import SQLAlchemyUserDatastore