Python数据集数据库错误

问题描述:

我写了一个脚本,用于在社交网络中迭代馈送,并在另一个社交网络中发布尚未发布的帖子。我分两步来做:首先阅读第一个社交网络的提要,并将每篇文章都放在我的数据库中,包括一个“发布”布尔值。其次,我遍历发布布尔值设置为false的数据库中的所有条目,并在第二个社交网络上发布消息。 我使用dataset库连接到我的本地SQLite数据库。现在的问题是:在第一步中一切正常。在第二步中,我使用提到的布尔值设置为false迭代数据库条目,将条目发布到第二个社交网络,然后我想更新数据库中的布尔值。然而问题就出:更新只能一次,然后我收到以下错误:Python数据集数据库错误

Traceback (most recent call last): 
    File "xy.py", line 56, in <module> 
    table.update(data, ['sc_id']) 
    File "/Users/.../lib/python2.7/site-packages/dataset/persistence/table.py", line 137, in update 
    rp = self.database.executable.execute(stmt) 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1752, in execute 
    return connection.execute(statement, *multiparams, **params) 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 729, in execute 
    return meth(self, multiparams, params) 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 321, in _execute_on_connection 
    return connection._execute_clauseelement(self, multiparams, params) 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 826, in _execute_clauseelement 
    compiled_sql, distilled_params 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 997, in _execute_context 
    self._commit_impl(autocommit=True) 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 530, in _commit_impl 
    self.connection._reset_agent is self.__transaction: 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 236, in connection 
    return self._revalidate_connection() 
    File "/Users/.../lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 247, in _revalidate_connection 
    raise exc.ResourceClosedError("This Connection is closed") 
sqlalchemy.exc.ResourceClosedError: This Connection is closed 

这是我更新的数据库字段的方式(根据数据集文档):

unpublished_messages = table.find(published = False) 
for posting in unpublished_messages: 
    # here i post to the second social network... 
    data = dict(sc_id = posting['sc_id'], published = True) 
    table.update(data, ['sc_id']) 

它在第一步中工作得非常好,并且它在迭代数据库条目时在第二步中工作一次,但在第二次循环迭代时它在table.update ...行中崩溃。

我绝对不明白发生了什么事。

不知何故,无法遍历ResultIter('unpublished_messages')并在同一步骤中修改表。我通过查看ResultIter并将这些元素放入一个普通的python列表来解决这个问题。然后我重复列表并更新表格。

+0

与字典或列表类似,您不能修改要从中迭代的对象。无需在内存中加载所有结果,您可以一次对结果进行分页并处理组,类似于我的Tumblr搜寻器的工作方式 - 获取20个结果并将其加载到列表中,迭代和处理列表中的条目,承诺,继续下一个20。 – 2016-04-20 18:56:11