私は、別のクラスと1対多の関係にあるいくつかのオブジェクトを読み取る必要があるライブラリで作業しています。次のコードは、私のライブラリのコードの非常に単純化されたバージョンを表しています。
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クエリを生成せずにオブジェクトをアンロードする方法と実行時間の増分はありますか?