Database errors in Django when using threading Database errors in Django when using threading multithreading multithreading

Database errors in Django when using threading


Try using TransactionTestCase:

class ThreadingTest(TransactionTestCase):

TestCase keeps data in memory and doesn't issue a COMMIT to database. Probably the threads are trying to connect directly to DB, while the data is not commited there yet. Seedescription here:https://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#django.test.TransactionTestCase

TransactionTestCase and TestCase are identical except for the manner in which the database is reset to a known state and the ability for test code to test the effects of commit and rollback. A TransactionTestCase resets the database before the test runs by truncating all tables and reloading initial data. A TransactionTestCase may call commit and rollback and observe the effects of these calls on the database.


Becomes more clear from this part of the documentation

class LiveServerTestCase(TransactionTestCase):    """    ...    Note that it inherits from TransactionTestCase instead of TestCase because    the threads do not share the same transactions (unless if using in-memory    sqlite) and each thread needs to commit all their transactions so that the    other thread can see the changes.    """

Now, the transaction has not been committed inside a TestCase, hence the changes are not visible to the other thread.


This sounds like it's an issue with transactions. If you're creating elements within the current request (or test), they're almost certainly in an uncommitted transaction that isn't accessible from the separate connection in the other thread. You probably need to manage your transctions manually to get this to work.