Ich habe ein Problem mit Fremdschlüssel in Flask. Mein Modell ist folgende:Kolben Fremdschlüsseleinschränkung
Model.py
class User(db.Model):
__tablename__ = "users"
__table_args__ = {'extend_existing': True}
user_id = db.Column(db.BigInteger, primary_key=True)
# EDIT
alerts = db.relationship('Alert', backref='user', lazy='dynamic')
def __init__(self, user_id):
self.user_id = user_id
class Alert(db.Model):
__tablename__ = 'alert'
__table_args__ = {'extend_existing': True}
alert_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
user_id = db.Column(db.BigInteger, db.ForeignKey('users.user_id'), nullable=False)
name = db.Column(db.String(ALERT_NAME_MAX_SIZE), nullable=False)
def __init__(self, user_id, name):
self.user_id = user_id
self.name = name
Ich bin der Lage, einige Benutzer hinzufügen, zum Beispiel
a = User(16)
b = User(17)
db.session.add(a)
db.session.add(b)
db.session.commit()
und einige Schlagzeilen:
c = Alert(16, 'test')
d = Alert(17, 'name_test')
db.session.add(c)
db.session.add(d)
db.session.commit()
Ich habe zwei Probleme mit dem Fremdschlüssel: Zunächst einmal, wenn ich versuche, den user_id Alarm zu ändern, ich bin in der Lage es zu tun, auch wenn die user_id ist nicht in der Datenbank
alert = Alert.query.get(1)
alert.user_id = 1222 # not in the database
db.session.commit()
und ich bin in der Lage eine Warnung vor einem user_id nicht in der erstellen Datenbank:
r = Alert(16223, 'test')
db.session.add(r)
Ich verstehe nicht, warum sie keine Beziehung Einschränkung ist. Thx,
Sind ändern? – polku
Ich benutze SQLAlchemy – WillB
Ja, ich kann das sehen, aber was ist Ihre Datenbank? SQLite erzwingt standardmäßig keine Fremdschlüssel. Sie müssen eine bestimmte Konfiguration verwenden, um mit SQLAlchemy arbeiten zu können. – polku