Ошибка ограничения внешнего ключа при удалении через SqlAlchemy - PullRequest
0 голосов
/ 03 октября 2019

У меня есть любопытный вопрос об определении внешнего ключа в 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? Или почему это дает другое поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...