Common Django errors and how to fix them: no such table: main.auth_user__old; ModuleNotFoundError: No module named ‘sqlparse’
I've recently been teaching myself Django. I was working on creating a new web app to handle the backend for some IoT projects I've been working on and recently came across two errors. In case anyone else comes across them, I will post the silver bullets below to hopefully save you some time.
1. no such table: main.auth_user__old
This was an unhandled exception that occurred whenever I tried to POST data from the Django admin:
Request Method: | POST |
---|---|
Request URL: | http://127.0.0.1:8000/admin/weatherstation/weather_recording/add/ |
Django Version: | 2.1.1 |
Exception Type: | OperationalError |
Exception Value: | no such table: main.auth_user__old |
Exception Location: | /home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py in execute, line 296 |
Python Executable: | /home/engineer/anaconda3/envs/djangoEnv/bin/python |
Python Version: | 3.5.6 |
Python Path: | [‘/home/engineer/Projects/WEATHERSTATION/weathersite’, ‘/home/engineer/anaconda3/envs/djangoEnv/lib/python35.zip’, ‘/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5’, ‘/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/plat-linux’, ‘/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/lib-dynload’, ‘/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/site-packages’] |
Request Method: POST Request URL: http://127.0.0.1:8000/admin/weatherstation/weather_recording/add/ Django Version: 2.1.1 Exception Type: OperationalError Exception Value: no such table: main.auth_user__old Exception Location: /home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py in execute, line 296 Python Executable: /home/engineer/anaconda3/envs/djangoEnv/bin/python Python Version: 3.5.6 Python Path: ['/home/engineer/Projects/WEATHERSTATION/weathersite', '/home/engineer/anaconda3/envs/djangoEnv/lib/python35.zip', '/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5', '/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/plat-linux', '/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/lib-dynload', '/home/engineer/anaconda3/envs/djangoEnv/lib/python3.5/site-packages']
Solution: This problem is described in Issue #21982. It has since been fixed. Since I use Anaconda ("conda") as my package manager, the simple fix for me was to just update my Django environment to the latest version.
2. ModuleNotFoundError: No module named 'sqlparse'
I thought I was home free at this point now that I had updated my Django environment to the latest version in conda, but alas that was not the case. This time, I received the following error:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/home/engineer/anaconda3/envs/djangoEnvNew/lib/python3.7/site-packages/django/core/management/__init__.py", line 381
...
File "/home/engineer/anaconda3/envs/djangoEnvNew/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 28,
in <module>
from .introspection import DatabaseIntrospection # isort:skip
File "/home/engineer/anaconda3/envs/djangoEnvNew/lib/python3.7/site-packages/django/db/backends/sqlite3/introspection.py",
line 4, in <module>
import sqlparse
ModuleNotFoundError: No module named 'sqlparse'
Thankfully the error stack is pretty helpful here. The most recent call with the error "ModuleNotFoundError: No module named 'sqlparse'" is pretty descriptive. To resolve this error, you simply need to install the module with the following command (while in your virtual environment):
conda install sqlparse
That's it! Hopefully this helps someone else. As always, let me know if you have any questions!