如何防止插入不存在的外键?

时间:2019-04-08 15:49:19

标签: python sqlalchemy

我为Flask应用程序使用SQLAlchimy定义了几个表。我已经在外键上设置了约束类,但是我的应用程序允许我使用不存在的引用ID注册新条目。

这些是我的课程:

class IsInGroup(Base):
    __tablename__ = "Is_in_group"
    id = Column('id', Integer, primary_key=True)
    ref_id_user_group = Column('ref_id_user_group', Integer, ForeignKey("Users.id_user"), nullable=False)
    ref_id_group_group = Column('ref_id_group_group', Integer, ForeignKey("Groups.id_group"), nullable=False)

    users = relationship('Users', foreign_keys=ref_id_user_group)
    groups = relationship('Groups', foreign_keys=ref_id_group_group)


class Users(Base, UserMixin):
    __tablename__ = "Users"
    id_user = Column('id_user', Integer, primary_key=True)
    name_user = Column('name_user', Unicode)
    passwd_hash = Column('passwd_hash', Unicode)
    email_user = Column('email_user', Unicode)


class Groups(Base):
    __tablename__ = "Groups"
    id_group = Column('id_group', Integer, primary_key=True)
    name_group = Column('name_group', Unicode)

因此,我的代码可以运行,但不能运行:

newUser = Users(name_user="admin", email_user="lol@lol.com")
    newUser.set_password("test")
    db.session.add(newUser)

newGroup = Groups(name_group="admin group",ref_id_group_categorie_group_categorie=1, ref_id_user_creator_group=1)
    db.session.add(newGroup)

# ref id does not exist
newAssociation = IsInGroup(ref_id_user_group=2, ref_id_group_group=2)
    db.session.add(newAssociation) #works

我的数据库(SQLite)没有阻塞。我正在等待类似“ IsInGroup.ref_id_user_group上的ForeignKeyConstraint == Users.id_user但id_user不存在”的错误。

0 个答案:

没有答案