Peewee提示“无法提交 - 没有活跃事务”

0 投票
1 回答
1770 浏览
提问于 2025-04-18 18:44

我的CherryPy应用每小时会执行一些清理工作,代码如下:

def every_hour():
    two_hours_ago = time.time() - 2 * 60 * 60
    DbChoice.delete().where(DbChoice.time_stamp < two_hours_ago).execute()

monitor_every_hour = Monitor(cherrypy.engine, every_hour, frequency=60 * 60)
monitor_every_hour.start()

有时候它会崩溃,并显示以下信息:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\peewee.py", line 2364, in execute_sql
    self.commit()
  File "C:\Python34\lib\site-packages\peewee.py", line 2371, in commit
    self.get_conn().commit()
sqlite3.OperationalError: cannot commit - no transaction is active

这个帖子和其他一些帖子讨论了在直接使用sqlite时如何解决这个问题,但我使用的是Peewee,我不确定自己在使用Peewee时是否做错了什么,还是说这是一个bug,我需要找到解决办法。

我开始连接的代码是:

db = peewee.SqliteDatabase(path_name + '/doc.db', check_same_thread=False)

1 个回答

1

看起来这个查询默认是自动提交的。所以你可以试着把自动提交设置为关闭。

db = peewee.SqliteDatabase(path_name + '/doc.db', check_same_thread=False)
db.set_autocommit(False)

http://peewee.readthedocs.org/en/2.0.2/peewee/cookbook.html#changing-autocommit-behavior

希望这能帮到你!

撰写回答