【问题标题】:flask_sqlalchemy object does not have attribute add when using flask_securityflask_sqlalchemy 对象在使用 flask_security 时没有属性添加
【发布时间】:2018-03-18 21:08:54
【问题描述】:

我正在尝试使用 flask_security 添加一些角色/用户,但是当我尝试使用 SQLAlchemySessionUserDatastore 创建用户时遇到了这个问题。所以我首先创建user_datastore,比如guide

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'

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-security


    【解决方案1】:

    从此行中删除 Session

    user_datastore = SQLAlchemySessionUserDatastore(db, User, Role)
    

    改成

    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    

    也进口了

    from flask_security import SQLAlchemyUserDatastore
    

    【讨论】:

      【解决方案2】:

      user_datastore = SQLAlchemySessionUserDatastore(db, User, Role)

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

      我的分辨率如下: user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role)

      【讨论】:

      • 这个解决了我,但为什么它需要 db.session?
      【解决方案3】:

      因此,如果您按照https://pythonhosted.org/Flask-Security/quickstart.html#id2 此处的示例进行操作,您会注意到他们使用的是SQLAlchemySessionUserDatastore。在到达这一点之前,如果您只是从flask_sqlalchemy 开始,您可能已经有一个数据库会话。因此,当我将其缩小到没有add 属性的对象 SQLAlchemy 时,我尝试使用sessionmaker。在其中我得到响应的 db session 已经存在,现在我有 2 个会话。

      长话短说阅读一些你应该使用SQLAlchemyUserDatastore 的文档!

      【讨论】:

        猜你喜欢
        • 2021-09-24
        • 2022-12-17
        • 1970-01-01
        • 2021-11-01
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 2021-08-21
        相关资源
        最近更新 更多