【问题标题】:Flask - SQLAlchemy - clear tables as well as many-to-many linking tableFlask - SQLAlchemy - 清除表以及多对多链接表
【发布时间】:2015-03-07 19:05:05
【问题描述】:

我有两个关系:服务和停止。它们彼此形成多对多的关系。 我想清除两个表中的所有数据,同时清空它们的多对多链接表。

我尝试了以下方法。

Service.query.delete()
Stop.query.delete()

这清除了两个表,但是链接表中的所有数据保持不变。

服务模式:

class Service(Base):
    __tablename__ = 'service'
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)
    service_type = Column(String(250), nullable=False)
    description = Column(String(250), nullable=False)

停止模型:

class Stop(Base):
    __tablename__ = 'stop'
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)
    latitude = Column(Float(), nullable=False)
    longitude = Column(Float(), nullable=False)
    services = relationship("Service",
                    secondary=stop_service,
                    backref="stop")

谁能告诉我如何自动清除链接表,而不必循环通过“停止”表?

【问题讨论】:

    标签: python database flask sqlalchemy cascade


    【解决方案1】:

    只需在连接表 (stop_service) 的定义中设置 ondelete to CASCADE

    stop_service = Table("stop_service", meta,
      Column("service_id", ForeignKey('Service.id', ondelete="CASCADE")),
      Column("stop_id", ForeignKey('Stop.id', ondelete="CASCADE")))
    

    【讨论】:

    • 感谢您的想法,我现在明白删除必须由数据库触发,因为 query.delete() 是批量操作。但是,即使添加了“ondelete”,链接表也没有被清空。我正在使用 SQLite 数据库。这是我的数据库架构:i.gyazo.com/0a8b2ea038d8291fca7dc1f7ec4a21be.png
    猜你喜欢
    • 2012-04-12
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2013-01-10
    • 1970-01-01
    • 2022-11-05
    相关资源
    最近更新 更多