0

我有一个联结表,其中包含对其他两个表的引用。我想要的是从连接表中删除这个引用。在交界处,我们可以为一架飞机从一个 geven 类型中获得一个以上的项目。问题是,当我删除给定项目时,相同类型的所有项目都会被移动。

如何从连接表中只删除一项?

这是我的数据库结构。

class Item(object):
    pass

class Plane(object):
    pass

class PlaneItem(object):
    pass    

planeMeta = Table("planes",
    Column("plane_id", Integer, primary_key = True)
)

itemMeta = Table("items",
    Column("item_id", Integer, primary_key = True)
)

planeItem = Table("planes_items",
    Column("planes_items_id", Integer, primary_key = True)
    Column("plane_id", Integer, ForeinKey("planes.plane_id"))
    Column("item_id", Integer, ForeinKey("items.item_id"))
)

mapper(Plane, planeMeta, properties={
    "items": relationship(Item, planeItem, lazy="dynamic")
})

添加新项目。

plane = dbSess.query(Plane).filter(Plane.plane_id == my_plane_id).one()
newItem = dbSess.query(Item).filter(Item.item_id == my_new_item).one()

plane.items.append(newItem)

删除一个项目。

itemForRemoving = myPlane.items.filter(item_id==4)

myPlane.items.remove(itemForRemoving)
4

1 回答 1

1

我最近澄清了这个问题的文档,这个问题最近出现了很多。

为了知道从“辅助”表中删除一行,删除该项目是 SQLAlchemy 所需要的。每次删除它只会删除一行,因此“相同类型的所有项目都被移动”必须是您在此处未说明的其他用法。

请参阅http://docs.sqlalchemy.org/en/rel_0_7/orm/relationships.html#deleting-rows-from-the-many-to-many-table

于 2012-07-14T03:05:20.600 回答