我在一個庫中工作,需要讀取與另一個類具有一對多關係的多個對象。以下代碼表示我的庫的代碼的高度簡化版本:是否可以卸載一次加載的sqlalchemy對象的關係數據?
class Plan(Base):
__tablename__ = 'plan'
id = Column(Integer, primary_key=True)
name = Column(String)
points = relationship('Point')
def __init__(self,name):
self.name = name
class Point(Base):
__tablename__ = 'point'
id = Column(Integer, primary_key=True)
coordinates = Column(String)
plan_id = Column(Integer,ForeignKey('plan.id'))
def __init__(self, coordinates):
self.coordinates = coordinates
我需要閱讀的關係(所有用於從上面的例子中的點)的所有數據,與所有的點進行的操作,並繼續下一個對象(示例中的Plan類中的對象)。由於每個計劃的點數都很高,我無法加載內存中的所有數據,我想要做的是在完成與計劃相關的點對象的操作之後(我不需要它們操作),卸載它們並繼續進行下一個計劃。我曾嘗試以下方法:
plan.points = []
或
for point in plan.points:
plan.points.remove(point)
但每種方法棧更新或刪除查詢(取決於級聯屬性是如何在關係中設置)暗示相當如果會話已提交,則會增加總執行時間2或3,並堆積可能有害的SQL操作。
是否有一種方法可以在不生成這些UPDATE/DELETE查詢的情況下卸載對象並增加執行時間?
謝謝,我已經嘗試過(先刪除相關對象,然後plan.points = []),它的工作原理雖然我得到一個警告提到刪除操作將不會繼續,所以我不知道這是否是進行此操作的最佳方法。 – muesan 2013-04-02 13:52:18