我正在尝试使用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'
答案 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