2014-08-27 4 views
0

내 CherryPy 응용 프로그램은 일부는 다음 코드를 사용하여 매 시간마다 청소를 수행합니다Peewee는 "커밋 할 수없는 - 어떤 트랜잭션이 활성화되지"라고

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 

이를 : 때때로 그는 다음과 같은 메시지와 함께 충돌

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() 

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

답변

1

가 보이는 :

내가와의 연결을 시작합니다. 따라서 자동 커밋을 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

어떻게해야합니까? 피 위와 거래를하지 않습니까? 그렇다면 왜 그것이 항상 작동하며 2-3 일에 한 번 실패합니까? – stenci

+0

흠, 대부분의 커밋은 db의 데이터를 정확하게 업데이트하고 있습니까? delete()가 공유 db 커넥션을 사용합니까? 또는 auto-commit을 true로 설정하여 새 연결을 생성하고 있습니까? 커밋을 주석 처리하고 레코드가 삽입되거나 업데이트되는지 확인할 수 있습니까? –

+0

앱이 시작되면 게시물에 표시된대로'db = ...'줄을 실행합니다. 나는 Peewee가 그 시간에 연결을 시작하는지 또는 그것이 필요할 때마다 새로운 연결을 만드는지를 알지 못합니다. (이 작은 세부 사항을 다루고 싶지 않기 때문에 Peewee를 사용하는 이유입니다). "커밋을 주석 처리"하여 당신은 무엇을 남자에게합니까? – stenci