【问题标题】:Custom integrity constraint in flask sqlalchemy烧瓶 sqlalchemy 中的自定义完整性约束
【发布时间】:2021-12-22 12:18:21
【问题描述】:

好的,我需要指导。

我有一个角色数据库,其中包含管理员、员工、经理、用户等值

还有一个带有 role_id FK 的用户表。

我正在使用 Flask 和 Sqlalchemy。

我想实现一个场景,只有一个超级管理员,而其他用户可以分配其他角色。这意味着如果超级管理员角色为 2,在用户表上,role_id 2 只能有一个条目。

我需要在 sqlalchemy 中实现这一点。

用代码更新



from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"]="sqlite:////tmp/stack.db"

db = SQLAlchemy(app)


class Role(db.Model):
    __tablename__ = "roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, unique=True)

    def __repr__(self):
        return self.role

class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    ...
    # what to add to role_id to make it have only one superadmin role id in this table
    role_id = db.Column(db.Integer, db.ForeignKey('users.id', onupdate='CASCADE'))
    role = db.relationship('User')

如果我已经进入角色表

| id  |  name      |
|-----|------------|
| 1   | superadmin |
| 2   | admin      |
| 3   | staff      |

我希望用户表中只有一个超级管理员。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python flask sqlalchemy flask-sqlalchemy


【解决方案1】:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"]="sqlite:////tmp/stack.db"

db = SQLAlchemy(app)


class Roles(db.Model):
    __tablename__ = "roles"
    id = db.Column(db.Integer, primary_key=True)
    role = db.Column(db.String, unique=True)

    def __repr__(self):
        return self.role

db.create_all()

如果我是你,我会这样做。 然后我会手动插入角色。

如果您创建另一个表说用户,您将引用上表中的角色。

我相信这会解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2018-07-02
    • 1970-01-01
    • 2012-03-19
    • 2012-01-31
    • 2012-12-29
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多