2014-08-27 78 views
0

我的CherryPy應用程序做一些清潔每隔一小時用下面的代碼:Peewee說:「無法提交 - 沒有事務處於活動狀態」

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 

thread和其他人談論如何解決問題時,直接與sqlite工作,但我使用Peewee,我不知道我是否做錯了Peewee或它是一個錯誤,我需要解決它。

我開始與連接:

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

這裏是答案:http://stackoverflow.com/questions/25850681/cherrypy-sqlite3-peewee-crashes-when-two-processes-execute-the-same-code-at/25851123#25851123 – stenci 2014-09-15 15:37:15

回答

1

貌似查詢默認自動提交。所以嘗試將autocommit設置爲False。

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

希望這有助於!

+0

如何做我沒有和Peewee交易?如果是這樣的話,爲什麼它一直工作,每2-3天就會失敗一次? – stenci 2014-08-27 17:59:39

+0

嗯,所以大多數提交都準確地更新數據庫中的數據?你的delete()是否使用共享數據庫連接,或者你是否創建了一個自動提交設置爲true的新連接?你可以註釋掉提交,看看你的記錄是插入還是更新? – 2014-08-27 18:16:27

+0

當應用程序啓動時,它執行'db = ...'行,如帖子中所示。我不知道Peewee是否在當時開始連接,或者它是否需要創建新連接(這就是爲什麼我使用Peewee,因爲我不想處理這些小細節)。你們通過什麼「註釋掉提交」? – stenci 2014-08-27 19:02:14

相關問題