Я хочу написать скрипт на python, который будет работать в цикле.Скрипт использует базу данных sqlite, на которую ссылается peewee.Я не могу поместить весь код здесь, потому что он имеет несколько сотен строк, но я покажу часть моего кода, написанную в peewee.Когда я запускаю свой код только один раз, тогда все работает нормально, хотя он должен работать в течение нескольких дней, поэтому он должен работать в цикле.Когда я делаю цикл, я получаю эту ошибку во второй итерации:
peewee.OperationalError: Соединение уже открыто.
Я попытался решить эту проблему, просто закрыв соединениеиспользуя эту строку: db.close ()
Но ... тогда я получаю это:
File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2677, in
close
self._close(self._state.conn)
File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2683, in _
close conn.close () sqlite3.OperationalError: невозможно закрыть из-за незавершенных операторовили незавершенные резервные копии
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "run.py", line 76, in <module>
main()
File "run.py", line 69, in main
db.close()
File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2677, in
close
self._close(self._state.conn)
File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2509, in
__exit__
reraise(new_type, new_type(*exc_args), traceback)
File "/usr/local/lib/python3.6/site-packages/peewee.py", line 186, in
reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2677, in
close
self._close(self._state.conn)
File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2683, in
_close
conn.close()
peewee.OperationalError: unable to close due to unfinalized statements or
unfinished backups
класс PeeweeDatabase:
def __init__(self):
db.connect()
@staticmethod
def create_tables():
with db:
db.create_tables([Model1, Model2, Model3])
@staticmethod
def save_Problem(view_name, id, link):
current_table = globals()[view_name]
try:
current_table.insert({
NewProblemCreated.ID: id,
NewProblemCreated.link: link,
NewProblemCreated.deliveryDate: 0,
NewProblemCreated.firstEncounter: datetime.now(),
NewProblemCreated.latestEncounter: datetime.now(),
NewProblemCreated.HowMuchTimesSent: 0,
NewProblemCreated.EncounteredBefore: False,
}).execute()
logger.info('Problem {} saved'.format(id))
except IntegrityError:
pass
@staticmethod
def update_latest_delivery(view_name, id):
current_table = globals()[view_name]
(current_table
.update(deliveryDate=datetime.now(), HowMuchTimesSent=current_table.HowMuchTimesSent+1)
.where(current_table.ID == pr_id)
.execute())
@staticmethod
def check_last_delivery(view_name, pr_id):
current_table = globals()[view_name]
res = (current_table
.select(current_table.deliveryDate)
.where(pr_id == current_table.prID)
.namedtuples()
)
return res[0][0]
Кто-нибудь сталкивался с этой проблемой раньше?
Раньше я использовал SQL-запросы напрямую, и у меня не было проблем, но я хотел, чтобыиспользуйте немного ORM.