Ich habe nach einer Möglichkeit gesucht, einen Fehler zu erhalten, wenn ich gegen eine externe Schlüsselbeschränkung verstoßen habe. Schlussfolgerung: (nicht gefunden). Auf der Codeseite aufgeben und schützen.
Python 3.7 Flask-SQLAlchemy v2.4.1
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/ Von https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/
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")
);
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()
Überprüfen Sie in test.db, ob ein neuer Datensatz hinzugefügt wurde.
Wenn jemand weiß, wie er einen Fehler erhalten kann, ohne den Test zu ändern, lassen Sie es mich bitte wissen.