ホームページ > データベース > mysql チュートリアル > SQLAlchemy で複雑な外部キー制約を実装するにはどうすればよいですか?

SQLAlchemy で複雑な外部キー制約を実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-18 19:06:17
オリジナル
479 人が閲覧しました

How to Implement Complex Foreign Key Constraints in SQLAlchemy?

SQLAlchemy 外部キー制約の検証

SQLAlchemy では、外部キー制約により、参照元の列の値が参照先テーブルに存在することが保証されます。これはデータの整合性を維持するために不可欠です。ただし、参照される列の値が参照元の行も参照していることを確認するなど、より複雑な検証が必要な場合もあります。

次の例を考えてみましょう:

  • SystemVariables テーブルには、外部キー choice_id があり、 VariableOptions テーブル。
  • VariableOptions テーブルには、SystemVariables テーブルを参照する外部キー variable_id があります。

この場合、次のようにします。 choice_id が、対応する変数 (variable_id) に対して有効な option を参照していることを検証するデータベース制約を追加します。

検証にサブクエリを使用する

達成するにはこれにより、外部キー制約内でサブクエリを使用できます。

import sqlalchemy as sa

class SystemVariable(sa.Model):
    __tablename__ = "systemvariables"

    variable_id = sa.Column(sa.Integer, primary_key=True)
    variable = sa.Column(sa.String)
    choice_id = sa.Column(
        sa.Integer, sa.ForeignKey("variableoptions.option_id"),
        sa.CheckConstraint(
            "variable_id IN (SELECT variable_id FROM variableoptions WHERE option_id = choice_id)"
        )
    )

class VariableOption(sa.Model):
    __tablename__ = "variableoptions"

    option_id = sa.Column(sa.Integer, primary_key=True)
    option = sa.Column(sa.String)
    variable_id = sa.Column(sa.Integer, sa.ForeignKey("systemvariables.variable_id"))
ログイン後にコピー

この制約により、SystemVariableschoice_id 値が に存在することが保証されます。 VariableOptions テーブルと、対応する variable_id VariableOptions は、SystemVariablesvariable_id と一致します。

追加列を持つ拡張外部キー

、または、外部キーを拡張して両方を含めることができます。 option_id および variable_id:

class SystemVariable(sa.Model):
    __tablename__ = "systemvariables"

    variable_id = sa.Column(sa.Integer, primary_key=True)
    variable = sa.Column(sa.String)
    choice_id = sa.Column(
        sa.Integer, sa.ForeignKey("variableoptions.option_id")
    )
    variable_id_option = sa.Column(
        sa.Integer, sa.ForeignKey("variableoptions.variable_id")
    )
ログイン後にコピー

このメソッドでは、サブクエリの必要性がなくなり、前のアプローチと同じ検証が保証されます。

両方メソッドは、SQLAlchemy で複雑な外部キー制約を実装する効果的な方法を提供します。どのアプローチを選択するかは、アプリケーションの特定の要件によって異なります。

以上がSQLAlchemy で複雑な外部キー制約を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート