Python 找出会话中有多少未提交的项目

Python 找出会话中有多少未提交的项目,python,sqlalchemy,Python,Sqlalchemy,我开发了一个解析大量数据的应用程序,但是如果我在解析所有数据之后提交数据,它将消耗太多内存。但是,我不能每次提交它,因为它花费了太多的硬盘I/O 因此,我的问题是如何知道会话中有多少未提交的项目?您可以使用。它是刚创建和未限制对象的集合。也可能是有用的。引用文件: # pending objects recently added to the Session session.new # persistent objects which currently have changes detect

我开发了一个解析大量数据的应用程序,但是如果我在解析所有数据之后提交数据,它将消耗太多内存。但是,我不能每次提交它,因为它花费了太多的硬盘I/O

因此,我的问题是如何知道会话中有多少未提交的项目?

您可以使用。它是刚创建和未限制对象的集合。也可能是有用的。引用文件:

# pending objects recently added to the Session
session.new

# persistent objects which currently have changes detected
# (this collection is now created on the fly each time the property is called)
session.dirty

# persistent objects that have been marked as deleted via session.delete(obj)
session.deleted

# dictionary of all persistent objects, keyed on their
# identity key
session.identity_map
你可以用。它是刚创建和未限制对象的集合。也可能是有用的。引用文件:

# pending objects recently added to the Session
session.new

# persistent objects which currently have changes detected
# (this collection is now created on the fly each time the property is called)
session.dirty

# persistent objects that have been marked as deleted via session.delete(obj)
session.deleted

# dictionary of all persistent objects, keyed on their
# identity key
session.identity_map

这是一个典型的缓冲情况。如果磁盘I/O太多(或者您不喜欢它导致长时间暂停等),请尝试一个相当大的数据块并减少它;如果您的配置文件在I/O调用中显示太多CPU时间,请增加它


要实现,请使用数组,每次“写入”都会向数组中追加一个项。有一个单独的“flush”函数来写全部内容。检查每个附加,如果已达到最大大小,则将它们全部写入,然后清除数组。最后,调用flush函数来写入部分填充的数组。

这是一个典型的缓冲情况。如果磁盘I/O太多(或者您不喜欢它导致长时间暂停等),请尝试一个相当大的数据块并减少它;如果您的配置文件在I/O调用中显示太多CPU时间,请增加它


要实现,请使用数组,每次“写入”都会向数组中追加一个项。有一个单独的“flush”函数来写全部内容。检查每个附加,如果已达到最大大小,则将它们全部写入,然后清除数组。最后,调用flush函数写入部分填充的数组。

您可以通过事件系统使用
session.new
session.dirty
session.deleted
跟踪刷新(导致.new、.dirty和.deleted重置)来跟踪未提交的更改。有关更多详细信息,请参见此处的对话:

您可以通过事件系统使用
会话.new
会话.dirty
会话.deleted
以及跟踪刷新(这会导致.new、.dirty和.deleted重置)来跟踪未提交的更改。有关更多详细信息,请参见此处的对话:

我们需要更多信息来帮助您。我们需要更多信息来帮助您。非常感谢,这很有帮助!!似乎
session.new
session.dirty
session.deleted
都是未刷新的实例,而不是未提交的实例。这意味着,如果您手动刷新会话(或会话自动刷新),这些属性不会反映未提交的更改。非常感谢,这很有帮助!!似乎
session.new
session.dirty
session.deleted
都是未刷新的实例,而不是未提交的实例。这意味着,如果手动刷新会话(或会话自动刷新),这些属性不会反映未提交的更改。