在使用association object设置的时候,要注意在relation设置中把cascade设置为casacade="all delete-orphan",这里关键的是delete-orphan,否则在删除association object后,关联的两个类并未把其标记为删除,如果这时候再对关联类进行删除操作,就会出现Dependency rule tried to blank-out primary key column的错误。 例子: class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(30), nullable=False, unique=True) password = Column(String(30), nullable=False) email = Column(String(75), nullable=False, unique=True) def __init__(self, name, password, email): self.name = name self.password = password self.email = email class GamePlayer(Base): __tablename__ = 'game_player' user_id = Column(Integer, ForeignKey('users.id'), primary_key=True) room_id = Column(Integer, ForeignKey('game.id'), primary_key=True) user = relationship(User, backref=backref('game_play', uselist=False, cascade='all, delete-orphan')) is_host = Column(Boolean, default=False) is_questioner = Column(Boolean, default=False) def __init__(self, user): self.user = user class Game(Base): __tablename__ = 'game' id = Column(Integer, primary_key=True) name = Column(String(30), nullable=False) state = Column(String(10), default='准备') create_time = Column(DateTime, default=datetime.now) player_list = relationship(GamePlayer, backref="game", lazy='dynamic', cascade='all, delete-orphan')