Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Peewee说:“我不知道;无法提交-没有活动的事务";_Python_Sqlite_Cherrypy_Peewee - Fatal编程技术网

Python Peewee说:“我不知道;无法提交-没有活动的事务";

Python Peewee说:“我不知道;无法提交-没有活动的事务";,python,sqlite,cherrypy,peewee,Python,Sqlite,Cherrypy,Peewee,我的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)

我的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()
这篇文章和其他人讨论了如何在直接使用sqlite时解决问题,但我使用的是Peewee,我不知道我是否在使用Peewee时出错,或者它是一个bug,我需要解决它

我通过以下方式启动连接:

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

看起来查询在默认情况下是自动提交的。因此,请尝试将自动提交设置为False

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


希望这有帮助

如何不使用Peewee提交事务?如果是这样的话,那么为什么它总是工作,并且每2-3天失败一次呢?嗯,那么大多数提交都在准确地更新数据库中的数据?您的delete()是使用共享数据库连接,还是正在创建一个新连接,并将auto commit设置为true?你能注释掉提交,看看你的记录是否被插入或更新吗?当应用程序启动时,它会执行
db=…
行,如帖子所示。我不知道Peewee是在那个时候启动连接,还是在需要时创建新连接(这就是为什么我使用Peewee,因为我不想处理这些小细节)。你认为“注释掉提交”是什么意思?任何更新、插入和删除都是每2/3天发生一次吗?我用一些你可以尝试的东西更新了我的答案。每小时都会删除一些记录。我回头看了一下日志,发现函数
每小时运行一次
与类似的函数
每一天运行一次(由另一个监视器执行)。
every\u day
函数在45秒的运行期间扫描一个文件夹,并使用
DbProject.create(number=number,name=name,time\u stamp=0)添加7条记录。这7条记录可能在执行缓慢的过程中随时发生(这就是为什么它们不在一个事务中)。
Monitor
执行的两个函数是否可能共享同一事务?我该如何解决这个问题?答案如下:
db = peewee.SqliteDatabase(path_name + '/doc.db', check_same_thread=False)
db.set_autocommit(False)