gpt4 book ai didi

python - 从 SQLAlchemy session 中删除对象

转载 作者:太空狗 更新时间:2023-10-29 21:19:04 25 4
gpt4 key购买 nike

我想将一个映射类的实例传递给一个非 SQLAlchemy 感知方法(在另一个进程中)并且只需要我的属性值。问题是,每次方法要读取属性值时,都会发生 UnboundExecutionError。我明白为什么会这样,但我想找到解决这个问题的方法。

我只需要我定义的属性的值(示例中的 idnamedirty),不需要 SQLAlchemy 开销在目标方法中。

示例类:

Base = declarative_base()
class Record(Base):
__tablename__ = 'records'
_id = Column('id', Integer, primary_key=True)
_name = Column('name', String(50))
_dirty = Column('dirty', Boolean, index=True)

@synonym_for('_id')
@property
def id(self):
return self._id

@property
def name(self):
return self._name

@name.setter
def name(self, value):
self._name = value
self._dirty = True

name = synonym('_name', descriptor=name)

@synonym_for('_dirty')
@property
def dirty(self):
return self._dirty

调用示例:

...
def do_it(self):
records = self.query.filter(Record.dirty == True)
for record in records:
pass_to_other_process(record)

我试过使用 session.expunge()copy.copy(),但没有成功。

最佳答案

您需要从 session 中删除 SQL ALchemy 对象,也就是“删除”它。然后,您可以请求任何已加载的属性,而无需尝试重​​用其最后已知的 session /未绑定(bind) session 。

self.expunge(record)

但是请注意,任何卸载的属性都将返回它的最后一个已知值或 None。如果您想稍后再次使用该对象,您可以再次调用“添加”或“合并”

self.add(record)

关于python - 从 SQLAlchemy session 中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3822726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com