SqlAlchemy中association object设置问题

在使用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')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值