我在一个需要读取与另一个类具有一对多关系的对象的库中工作。以下代码表示我的库代码的高度简化版本:
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 查询和增加执行时间的情况下卸载对象?