проблема
У меня есть программа, которая использует storm 0.14 , и она дает мне эту ошибку в Windows:
sqlite3.OperationError: database table is locked
Дело в том, что под Linux он работает правильно.
У меня сложилось впечатление, что это происходит только после внесения определенного количества изменений, как это происходит в некотором коде, который копирует множество объектов.
Включение режима отладки дает мне это в Windows:
83 EXECUTE: 'UPDATE regularorder_product SET discount=? WHERE regularorder_product.order_id = ? AND regularorder_product.product_id = ?', (Decimal("25.00"), 788, 274)
84 DONE
85 EXECUTE: 'UPDATE repeated_orders SET nextDate=? WHERE repeated_orders.id = ?', (datetime.date(2009, 3, 31), 189)
86 ERROR: database table is locked
В Linux:
83 EXECUTE: 'UPDATE regularorder_product SET discount=? WHERE regularorder_product.order_id = ? AND regularorder_product.product_id = ?', (Decimal("25.00"), 789, 274)
84 DONE
85 EXECUTE: 'UPDATE repeated_orders SET nextDate=? WHERE repeated_orders.id = ?', (datetime.date(2009, 3, 31), 189)
86 DONE
Информация о системе
Windows
- Windows XP SP 3
- Python 2.5.4
- NTFS раздел
Linux
- Ubuntu 8.10
- Python 2.5.2
- ext3 раздел
Какой-то код
def createRegularOrderCopy(self):
newOrder = RegularOrder()
newOrder.date = self.nextDate
# the exception is thrown on the next line,
# while calling self.products.__iter__
# this happens when this function is invoked the second time
for product in self.products:
newOrder.customer = self.customer
newOrder.products.add(product)
return newOrder
orders = getRepeatedOrders(date)
week = timedelta(days=7)
for order in orders:
newOrder = order.createRegularOrderCopy()
store.add(newOrder)
order.nextDate = date + week
Вопрос
Есть ли что-то в sqlite3 / python, которое отличается между windows и linux? В чем может быть причина этой ошибки и как я могу ее исправить?
Еще одно наблюдение
При добавлении COMMIT
в том месте, где происходит ошибка, вместо этого выдается эта ошибка: sqlite3.OperationalError: cannot commit transaction - SQL statements in progress
Ответы на ответы
Я не использую несколько потоков / процессов, поэтому параллелизм не должен быть проблемой, а также у меня есть только один объект Store.