0

他の2つのテーブルへの参照を保持するジャンクションテーブルがあります。私が欲しいのは、ジャンクションテーブルからこの参照を削除することです。ジャンクションでは、1つの平面に対してgevenタイプから複数のアイテムを持つことができます。問題は、特定のアイテムを削除すると、同じタイプのすべてのアイテムが移動されることです。

ジャンクションテーブルから1つのアイテムのみを削除するにはどうすればよいですか?

これが私のデータベース構造です。

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 が必要とするすべてです。削除ごとに1行しか削除されないため、「同じタイプのすべてのアイテムが移動されます」は、ここでは説明していない他の使用法である必要があります.

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 に答える