Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melaksanakan Kekangan Utama Asing Kompleks dalam SQLAlchemy?

Bagaimana untuk Melaksanakan Kekangan Utama Asing Kompleks dalam SQLAlchemy?

Susan Sarandon
Lepaskan: 2024-12-18 19:06:17
asal
513 orang telah melayarinya

How to Implement Complex Foreign Key Constraints in SQLAlchemy?

SQLAlchemy Foreign Key Constraint Validation

Dalam SQLAlchemy, kekangan kunci asing memastikan nilai lajur rujukan wujud dalam jadual yang dirujuk. Ini penting untuk mengekalkan integriti data. Walau bagaimanapun, kadangkala kita memerlukan pengesahan yang lebih kompleks, seperti memastikan nilai lajur yang dirujuk juga merujuk kembali kepada baris rujukan.

Pertimbangkan contoh berikut:

  • Pembolehubah Sistem jadual mempunyai kunci asing id_pilihan merujuk kepada Jadual VariableOptions.
  • VariableOptions jadual mempunyai kunci asing variable_id merujuk kembali kepada jadual SystemVariables.

Dalam kes ini, kami mahu tambahkan kekangan pangkalan data yang mengesahkan bahawa choice_id merujuk kepada pilihan yang sah untuk pembolehubah yang sepadan (variable_id).

Menggunakan Subquery untuk Pengesahan

Untuk mencapai matlamat ini, kami boleh menggunakan subquery dalam kekangan kunci asing:

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"))
Salin selepas log masuk

Kekangan ini memastikan bahawa nilai choice_id dalam SystemVariables hadir dalam VariableOptions jadual dan yang sepadan variable_id dalam VariableOptions sepadan dengan variable_id dalam SystemVariables.

Extended Foreign Key dengan Extended Foreign Key Lajur

Sebagai alternatif, kita boleh melanjutkan kunci asing untuk memasukkan kedua-dua option_id dan 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")
    )
Salin selepas log masuk

Kaedah ini menghapuskan memerlukan subkueri dan memastikan pengesahan yang sama seperti yang sebelumnya pendekatan.

Kedua-dua kaedah menyediakan cara yang berkesan untuk melaksanakan kekangan kunci asing yang kompleks dalam SQLAlchemy. Pilihan pendekatan bergantung pada keperluan khusus aplikasi.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kekangan Utama Asing Kompleks dalam SQLAlchemy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan