在使用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')
SqlAlchemy中association object设置问题
最新推荐文章于 2024-08-17 22:52:51 发布