首页 > 解决方案 > SQLAlchemy 完整性错误唯一约束失败:users.login

问题描述

我正在使用 Flask 制作一个 Web 仪表板,它有 Discord 登录(Flask-Dance)。代码给了我这个错误:sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: users.login。如果用户已经登录,该代码完全可以正常工作。但是当没有登录的其他人尝试登录时,就会发生错误。这是我目前正在使用的:

class User(UserMixin, dbsl.Model):
    id = dbsl.Column(dbsl.Integer, primary_key=True)
    email = dbsl.Column(dbsl.String(256), unique=True)


class OAuth(OAuthConsumerMixin, dbsl.Model):
    user_id = dbsl.Column(dbsl.Integer, dbsl.ForeignKey(User.id), nullable=False)
    user = dbsl.relationship(User)

@oauth_authorized.connect_via(d_oauth)
def discord_logged_in(blueprint, token):
    resp = discord_oauth.discord.get("/api/users/@me").content

    info = json.loads(resp)
    user_id = info["id"]

    query = OAuth.query.filter_by(provider=blueprint.name, user_id=user_id)
    try:
        oauth = query.one()
    except NoResultFound:
        oauth = OAuth(user_id=user_id, token=token)

    if oauth.user:
        login_user(oauth.user)

    else:
        user = User(email=info["email"], id=user_id)
        oauth.user = user
        dbsl.session.add_all([user, oauth])
        dbsl.session.commit()
        login_user(user)

    return False

正如我所说,该程序运行良好,但是当未登录的人尝试登录时会引发此错误。我该如何解决这个问题?

标签: pythonflasksqlalchemyflask-sqlalchemyflask-dance

解决方案


推荐阅读