У меня есть любопытный вопрос об определении внешнего ключа в SQLAlchemy.
У меня есть отношение один ко многим, и вот мой модельный сайт и станция.
class Site(db.Model):
__tablename__ = "site"
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(), nullable=False)
address = db.Column(db.String(), nullable=False)
city = db.Column(db.String())
state = db.Column(db.String())
latitude = db.Column(db.Float(), nullable=False)
longitude = db.Column(db.Float(), nullable=False)
site_type = db.Column(db.String())
stations = relationship('Station', backref='site')
def __init__(self, **kwargs):
super(Site, self).__init__(**kwargs)
class Station(db.Model):
__tablename__ = "station"
id = db.Column(db.Integer(), primary_key=True)
site_id = db.Column(db.Integer(), ForeignKey('site.id'))
name = db.Column(db.String())
def __init__(self, **kwargs):
super(Station, self).__init__(**kwargs)
Когда я удаляю строку из таблицы сайта, она просто оставляет site_id в таблице станций как ноль, я знаю, потому что я не определил ее как ненулевой столбец. Мой скрипт для удаления выглядит так:
>>> s = Site.query.filter_by(id=5).first()
>>> db.session.delete(s)
>>> db.session.commit()
Но когда я вручную удаляю из PgAdmin, он скажет мне следующее:
ERROR: update or delete on table "site" violates foreign key constraint "station_site_id_fkey" on table "station"
DETAIL: Key (id)=(6) is still referenced from table "station".
Как я могу получить ту же ошибку при удалении черезSQLAlchemy? Или почему это дает другое поведение?