[PYTHON] Flask-Comment faire adhérer SQL Alchemy aux contraintes de clés externes

Je cherchais un moyen d'obtenir une erreur lorsque j'ai violé une contrainte de clé externe. Conclusion: (introuvable). Abandonnez et protégez du côté du code.

Méthode de vérification

environnement

Python 3.7  Flask-SQLAlchemy v2.4.1

Créez deux tables.

Model.py


from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    addresses = db.relationship('Address', backref='person', lazy=True)


class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), nullable=False)
    person_id = db.Column(db.Integer, db.ForeignKey('person.id'),
                                nullable=False)

https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/ Depuis https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/

La table finie

test.db


CREATE TABLE "person" (
	"id"	INTEGER NOT NULL,
	"name"	VARCHAR(50) NOT NULL,
	PRIMARY KEY("id")
);

CREATE TABLE "address" (
	"id"	INTEGER NOT NULL,
	"email"	VARCHAR(120) NOT NULL,
	"person_id"	INTEGER NOT NULL,
	PRIMARY KEY("id"),
	FOREIGN KEY("person_id") REFERENCES "person"("id")
);

Faites un test

test.py


import unittest

def testForeignKey(self):
    db.create_all()
    db.session.add(db.Address(id=0, email="aaa", person_id="bbb"))
    db.session.commit()
    
    
if __name__ == '__main__':
    unittest.main()

Regardez dans test.db pour voir si un nouvel enregistrement a été ajouté.

Si quelqu'un sait comment obtenir une erreur sans modifier le test, merci de me le faire savoir.

Recommended Posts

Flask-Comment faire adhérer SQL Alchemy aux contraintes de clés externes
Ecrire des contraintes de clé externe dans Django