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:
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"))
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") )
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!