通过SqlAlchemy删除时出现外键约束错误

时间:2019-10-03 16:53:07

标签: python sqlalchemy

我对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删除时,如何出现相同的错误?还是为什么会产生不同的行为?

0 个答案:

没有答案