Python 找出会话中有多少未提交的项目
我开发了一个解析大量数据的应用程序,但是如果我在解析所有数据之后提交数据,它将消耗太多内存。但是,我不能每次提交它,因为它花费了太多的硬盘I/O 因此,我的问题是如何知道会话中有多少未提交的项目?您可以使用。它是刚创建和未限制对象的集合。也可能是有用的。引用文件:Python 找出会话中有多少未提交的项目,python,sqlalchemy,Python,Sqlalchemy,我开发了一个解析大量数据的应用程序,但是如果我在解析所有数据之后提交数据,它将消耗太多内存。但是,我不能每次提交它,因为它花费了太多的硬盘I/O 因此,我的问题是如何知道会话中有多少未提交的项目?您可以使用。它是刚创建和未限制对象的集合。也可能是有用的。引用文件: # pending objects recently added to the Session session.new # persistent objects which currently have changes detect
# 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
都是未刷新的实例,而不是未提交的实例。这意味着,如果手动刷新会话(或会话自动刷新),这些属性不会反映未提交的更改。