5

postgresqlでsqlalchemyを使用しています。そして、私はsqlalchemyの初心者です。

「to_user_id」というモデル「User」の forien キーをモデル「Invitation」に作成しましたが、このキーは nullable ではありません。

を使用してモデル「ユーザー」のインスタンスを削除しようとすると

session.delete(user)

また、sqlalchemy は招待状の to_user_id を削除前に自動的に NULL に設定し、postgresql は次のエラーを発生させます。

IntegrityError: (IntegrityError) null value in column "to_user_id" violates not-null constraint

どうすれば無効にできますか?

これが私のモデルの定義です

class User(Base):
    '''
    User model
    '''
    __tablename__='User'
    id = Column(Integer,primary_key=True)

class Invitation(Base):
    '''
    Invitation model
    '''
    __tablename__ = 'Invitation'
    __table_args__ = (UniqueConstraint('appointment_id', 'to_user_id'),)
    id = Column(Integer, primary_key=True)

    appointment_id = Column(Integer,ForeignKey('Appointment.id',
        ondelete='CASCADE'), nullable=False)
    appointment = relationship('Appointment', backref=backref('invitations'),
    )

    from_user_id = Column(Integer,ForeignKey('User.id',
        ondelete='SET NULL'), nullable=True)
    from_user = relationship('User', backref=backref('sent_invitations'),
        primaryjoin='Invitation.from_user_id==User.id')

    to_user_id = Column(Integer,ForeignKey('User.id',
        ondelete='CASCADE'), nullable=False)
    to_user = relationship('User',backref=backref('received_invitations'),
        primaryjoin='Invitation.to_user_id==User.id',
    )
4

1 に答える 1

3

に渡す必要がcascade='delete'ありto_user relationship()ます。こちらのドキュメントを参照してください

へのondelete引数ForeignKeyは、ORM の動作ではなく、DDL ステートメントの生成に影響します。

于 2012-06-12T05:51:56.917 に答える