SQL Alchemy ORM ベースの db 定義で遊んでみます。次のようにテーブルを定義しました
class Customer(Base):
__tablename__ = 'customer'
id = Column(Integer, primary_key=True)
name = Column(String(80))
auth = relationship("CustomerAuth", backref='customer')
class CustomerAuth(Base):
__tablename__ = 'authentication'
id = Column(Integer, ForeignKey('customer.id'))
username = Column(String(80), primary_key=True)
passwd = Column(String(80))
今、私はセッションを作成しています
Session = sessionmaker(bind=sqla.engine)
session = Session()
そして、ID 1 と 2 を持つ Customer の 2 つの行オブジェクトを作成しようとしました
cst1 = sqla.Customer(id=1,name='shyam')
cst2 = sqla.Customer(id=2,name='ram')
そして、Customer の ID 1、2、および 3 を参照する CustomerAuth の 3 つの行オブジェクトを作成します。
auth1 = sqla.CustomerAuth(id=1,username='shyamu',passwd='wam')
auth2 = sqla.CustomerAuth(id=2,username='ramu',passwd='dam')
auth3 = sqla.CustomerAuth(id=3,username='lamu',passwd='sam')
ご覧のとおり、Customer.id を参照する外部キーである id = 3 の CustomerAuth 行を作成しました。しかし、 Customer テーブルには id=3 のエントリがないため、これは失敗するはずです
session.add(cst1)
session.add(cst2)
session.add(auth1)
session.add(auth2)
session.flush()
この操作は失敗するはずですが、成功します。
session.add(auth3)
session.flush()
外部キーの強制をバイパスして何をしていないのか知りたい
前もって感謝します