I've got a programm that uses storm 0.14 and it gives me this error on windows:
sqlite3.OperationError: database table is locked
The thing is, under linux it works correctly.
I've got the impression that it happens only after a certain amount of changes have been done, as it happens in some code, that copies a lot of objects.
Turning on the debug mode gives me this on 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
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 XP SP 3
- Python 2.5.4
- NTFS partition
- Ubuntu 8.10
- Python 2.5.2
- ext3 partition
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
Is there anything about sqlite3/python that differs between windows and linux? What could be the reason for this bug and how can I fix it?
When adding a
COMMIT at the place where the error happens, this error is thrown instead:
sqlite3.OperationalError: cannot commit transaction - SQL statements in progress
Answers to answers
I'm not using multiple threads / processes, therefore concurrency shouldn't be a problem and also I've got only one Store object.
The "database table is locked" error is often a generic/default error in SQLite, so narrowing down your problem is not obvious.
Are you able to execute any SQL queries? I would start there, and get some basic SELECT statements working. It could just be a permissions issue.