Django - No such table: main.auth_user__old
PythonDjangoPython 3.xDjango ModelsPython Problem Overview
I was following the first app tutorial from the official Django docs and got this error when trying to save some changes made through the admin page. I did some research on it, but the possible solutions I was able to find, such as migrating the db, simply won't work. Just let me know if you want to see some specific part of my code.
Following is error:
> OperationalError at /admin/polls/question/1/change/ no such table: > main.auth_user__old Request Method: POST Request > URL: http://127.0.0.1:8000/admin/polls/question/1/change/ Django > Version: 2.1.4 Exception Type: OperationalError Exception Value: no > such table: main.auth_user__old Exception > Location: /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py > in execute, line 296 Python > Executable: /Users/gfioravante/Projects/test_app/ta_env/bin/python3 > Python Version: 3.7.1 Python Path: > ['/Users/gfioravante/Projects/test_app/test_app', > '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', > '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7', > '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', > '/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages'] > Server time: Wed, 5 Dec 2018 16:45:00 +0000
and the traceback:
> Environment: > > > Request Method: POST Request URL: > http://127.0.0.1:8000/admin/polls/question/1/change/ > > Django Version: 2.1.4 Python Version: 3.7.1 Installed Applications: > ['polls.apps.PollsConfig', 'django.contrib.admin', > 'django.contrib.auth', 'django.contrib.contenttypes', > 'django.contrib.sessions', 'django.contrib.messages', > 'django.contrib.staticfiles'] Installed Middleware: > ['django.middleware.security.SecurityMiddleware', > 'django.contrib.sessions.middleware.SessionMiddleware', > 'django.middleware.common.CommonMiddleware', > 'django.middleware.csrf.CsrfViewMiddleware', > 'django.contrib.auth.middleware.AuthenticationMiddleware', > 'django.contrib.messages.middleware.MessageMiddleware', > 'django.middleware.clickjacking.XFrameOptionsMiddleware'] > > > > Traceback: > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" > in _execute > 85. return self.cursor.execute(sql, params) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" > in execute > 296. return Database.Cursor.execute(self, query, params) > > The above exception (no such table: main.auth_user__old) was the > direct cause of the following exception: > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py" > in inner > 34. response = get_response(request) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py" > in _get_response > 126. response = self.process_exception_by_middleware(e, request) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py" > in _get_response > 124. response = wrapped_callback(request, *callback_args, **callback_kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" > in wrapper > 604. return self.admin_site.admin_view(view)(*args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" > in _wrapped_view > 142. response = view_func(request, *args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py" > in _wrapped_view_func > 44. response = view_func(request, *args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py" in inner > 223. return view(request, *args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" > in change_view > 1640. return self.changeform_view(request, object_id, form_url, extra_context) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" > in _wrapper > 45. return bound_method(*args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" > in _wrapped_view > 142. response = view_func(request, *args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" > in changeform_view > 1525. return self._changeform_view(request, object_id, form_url, extra_context) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" > in _changeform_view > 1571. self.log_change(request, new_object, change_message) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" > in log_change > 826. change_message=message, > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py" > in log_action > 35. change_message=change_message, > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py" > in manager_method > 82. return getattr(self.get_queryset(), name)(*args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" > in create > 413. obj.save(force_insert=True, using=self.db) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" > in save > 718. force_update=force_update, update_fields=update_fields) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" > in save_base > 748. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" > in _save_table > 831. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" > in _do_insert > 869. using=using, raw=raw) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py" > in manager_method > 82. return getattr(self.get_queryset(), name)(*args, **kwargs) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" > in _insert > 1136. return query.get_compiler(using=using).execute_sql(return_id) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/sql/compiler.py" > in execute_sql > 1289. cursor.execute(sql, params) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" > in execute > 100. return super().execute(sql, params) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" > in execute > 68. return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" > in _execute_with_wrappers > 77. return executor(sql, params, many, context) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" > in _execute > 85. return self.cursor.execute(sql, params) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py" > in exit > 89. raise dj_exc_value.with_traceback(traceback) from exc_value > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" > in _execute > 85. return self.cursor.execute(sql, params) > > File > "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" > in execute > 296. return Database.Cursor.execute(self, query, params) > > Exception Type: OperationalError at /admin/polls/question/1/change/ > Exception Value: no such table: main.auth_user__old
Python Solutions
Solution 1 - Python
Get rid of this issue easily maintaining the following steps:
- keep django version 2.1.5 (the issue addressed in this version)
pip install django==2.1.5
- Delete the SQLite db
- Migrate again
python manage.py makemigrations
and thenpython manage.py migrate
- Start the server
python manage.py runserver
DONE!
Solution 2 - Python
I just came across this myself, it looks to be related to https://code.djangoproject.com/ticket/29182. For now, you can just downgrade your version of sqlite to a version prior to 2.6 (e.g. 2.5.1)
Solution 3 - Python
Just did this and it resolved the problem:
pip install Django --upgrade
Then:
python manage.py migrate
python manage.py makemigrations app
python manage.py migrate
Solution 4 - Python
Here is what I did to solve this problem:
-
Go to the virtual environment and install
[email protected]
pip install django==2.1.7
-
Delete the
db.sqlite3
file in your root folder. -
Create the new
db.sqlite3
in your root folder. -
Re-run migrations:
python3 manage.py makemigrations python3 manage.py migrate
Now it should be working all right.
Solution 5 - Python
The problem is caused by the modified behaviour of the ALTER TABLE RENAME
statement in SQLite 3.26.0 (see compatiblity note). They also introduced the PRAGMA legacy_alter_table = ON
statement in order to maintain the compatibility with previous versions. The upcoming Django release 2.1.5 utilizes the previously mentioned statement as a hotfix. It's expected on January 1, 2019.
Solution 6 - Python
go to this folder django/db/backends/sqlite3
backup schema.py
file to another folder
open the original schema.py in a text editor
there you can see a code snippet like
def __enter__(self):
# Some SQLite schema alterations need foreign key constraints to be
# disabled. Enforce it here for the duration of the schema edition.
if not self.connection.disable_constraint_checking():
raise NotSupportedError(
'SQLite schema editor cannot be used while foreign key '
'constraint checks are enabled. Make sure to disable them '
'before entering a transaction.atomic() context because '
'SQLite3 does not support disabling them in the middle of '
'a multi-statement transaction.'
)
self.connection.cursor().execute('PRAGMA legacy_alter_table = ON')
return super().__enter__()
comment them and paste the following code snippet
def __enter__(self):
# Some SQLite schema alterations need foreign key constraints to be
# disabled. Enforce it here for the duration of the transaction.
self.connection.disable_constraint_checking()
self.connection.cursor().execute('PRAGMA legacy_alter_table = ON')
return super().__enter__()
This worked for me. (the backup for the schema.py is in case the work go wrong ; D )
for more info
Solution 7 - Python
I solved the problem by upgrading Django from 2.1.4 to 2.1.5 by running
pip install --upgrade django==2.1.5
but I had to rebuild the project anew, because the bug seems to be somehow related to the objects I inserted into the database by using the old version of Django.
UPDATE:
Instead of deleting the entire project, it was sufficient to delete only the database. And then to run
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
Solution 8 - Python
-
First, stop the server and delete db.sqlite3.
-
Then, you need to run:
python manage.py makemigrations
python manage.py migrate
-
After running this command you need to create super user. To Create Super User, run:
python manage.py createsuperuser
Enter the super user details there. -
Run your server again.
There you go.
Solution 9 - Python
for me, it was from my django version (that was 2.1) install higher version (I used 2.1.5 for some reasons) ** delete db.sqlite3, and everything in migration folder except init.py run command:
pip install django==2.1.5 --upgrade
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
Solution 10 - Python
Same thing is happened to me, very frustrating. I use anaconda for my environments, I found that I couldn't remove sqlite without immediately reinstalling the most up to date version of sqlite. Trying an older version of django also didn't seem to work. The only solution that has worked for me is by using a PostgreSQL database. It's certainly not ideal but I am planning on utilising the PostgreSQL database in the future so this wasn't a complete waste of time. If you find yourself in the same place as I was then this video may be helpful if you want to know how to connect the PostgreSQL database with your django project.
You'll need to install the postgreSQL database before actually making the changes in settings.py, the installation is more of less clicking Next on all the options. However, remember the username and password you use during installation.
Solution 11 - Python
Even after upgrading to the latest Django 2.2.12 and running either migrate
or the official database rebuild script, I got the same error with __old_
:
django.db.utils.IntegrityError: The row in table 'djangocms_blog_post_translation' with primary key '2' has an invalid foreign key: djangocms_blog_post_translation.master_id contains a value '2' that does not have a corresponding value in djangocms_blog_post__old.id.
Here's my hack:
- dump the database contents to sql:
sqlite3 my_db.db .dump > my_db.sql
- run a regex over the sql output, replacing
__old" ("id")
with" ("id") DEFERRABLE INITIALLY DEFERRED
- delete the old database file
- load the modified sql into a new database:
sqlite3 my_db.db < my_db.sql
- ??? & profit
Solution 12 - Python
Open => /YourAppFolder/migrations/ You would to see the migrating files just like '0001_initial.py' delete all of these files. And run the follwing command
1- python manage.py makemigrations
2- python manage.py migrate
Hope, it must solve your problem
Solution 13 - Python
For the above problem and solution is:
-
Go to the terminal and type in
pip install django==2.1.7
or the latest version of django -
After the installation,In the terminal type in
python manage.py makemigrations
,and thenpython manage.py migrate
-
In the terminal,Start the server with code
python manage.py runserver
-
Login to the admin server with the password and the add the product,It will successfully add the product.
Solution 14 - Python
For others who don't want to downgrade any software, you can head into your settings.py
file and in the DATABASES
dict, you can replace .sqlit3
with .postgresql
, and right underneath it change the db.sqlit3
to db.sql
. This switches your default db to using postgreSQL.
In doing so, you'll need to pip install psycopg2
.
Delete your db.sqlite3
file (if you have one/don't care about losing what's in it) and everything else that isn't the __init__.py
file in your app's migration folder. Once you've done all of that, you can run python manage.py makemigrations
and python manage.py migrate
and then it should work :)
Hope I was able to help someone!
Solution 15 - Python
keep django version 2.1.5
This issue is adressed only in this version of Django
- pip install django==2.1.5
- Delete the SQLite db
- Run migration
- Start the server python manage.py runserver
This solves the above issue
Solution 16 - Python
Steps:
-
Uninstall current Django from your ENV. Just delete the folder "anaconda3/envs/yourenv/lib/python3.7/site-packages/Django all versions..
Note: Only for Anaconda users, other users should figure out how to uninstall a package from your ENV.
-
Download the repo as zip file.
-
Extract zip.
-
Switch to your ENV.
-
Enter the extracted folder.
-
Run
"python setup.py install"
And install Django. -
Delete your previous
db.sqlite3
file. Now apply the migrations again to create a newdb.sqlite3
file.Note: I don't know how to fix previous dbfile and prevent data loss. So please tell me if you know.
-
Run Server.
Congrats! It works fine now.
Update to latest django in January from the official Django release.
Solution 17 - Python
There are just 4 things I did on command line and it fixed mine.
- ctrl + c (stop server)
py manage.py makemigrations
py manage.py migrate
py manage.py runserver
(start server)
Solution 18 - Python
I had the same issue except that I had 2 sqlite databases and custom database router. I managed to get it working by downgrading Django to 1.11.20 and no need to recreate the databases.
Solution 19 - Python
For those who cannot resolve this error with above answers, if you had made your app with its name “main”, this error may occur cause of same app name issue. So try to change your app name “main” to another.
Solution 20 - Python
you need to upgrade Django, this issue has been fixed in this PR https://github.com/django/django/pull/10733
Solution 21 - Python
I solved the problem by changing some of my models. I had one named project and one named projects. The database tables got confused and threw me this error.
Solution 22 - Python
I have solved this issue using below :
-
Delete the db.sqlit3
-
app's directory delete everything in pycache
-
manage.py makemigrations, manage.py migrate, manage.py createsuperuser and then manage.py runserver.
Solution 23 - Python
I had the same issue and fixed it by doing the below:
-
Get the latest
django
version -
get the latest
SQL Lite
version -
delete
db.sqlite3
file from your project -
Make a small change to the
models.py
(e.g. change the size of a field) -
generate a new
db.sqllite3
file by running themakemigrations
&migrate commands
-
import the newly created
db.sqllite3
file intoSQL Lite
Solution 24 - Python
I installed/downgraded django to 2.2 version ,this removed django 3.x
pip install django==2.2
and then I deleted db.sqlite file and then
I tried
python manage.py makemigrations,
python manage.py migrate
python manage.py creatingsuperuser.
Solution 25 - Python
First, update django version:
pip install django --upgrade
then
./manage.py makemigration
./manage.py migrate
./manage.py runserver
Solution 26 - Python
-
Upgrade Django
pip install Django --upgrade
-
Delete the
db.sqlite3
file the root folder of your project. -
Create the new db.sqlite3 in your root folder by re-running migrations.
python3 manage.py makemigrations
-
Migrate
python3 manage.py migrate
It may work with just this or you may need to create a new superuser if it was deleted.
- Check for your superuser using
python manage.py shell
from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)
If <QuerySet []>
appears there is no user.
Else check if your user exists.
- If your user does not exist create one using
python manage.py createsuperuser
Solution 27 - Python
Please check if you haven't deleted the migration folder from your app if deleted try to restore the folder and remove migration files or if deleted permanently create app and copy paste your work and
then
1. Delete db.sqlite3
2. python manage.py makemigrations
3. python manage.py migrate
4. python manage.py createsuperuser
HTH :)
Solution 28 - Python
- Delete db.sqlite3
- makemigrations & migrate
- Create new super user
This works for me
Solution 29 - Python
Note: Do not follow this trick if you have some personal data in Sqlite3 DB as you're going to delete Sqlite3 DB
I know many answers are given to this question but only this trick help me to solve this issue as I'm beginner at python and learning Django.
- Stopped the django webserver running, Ctrl-C
- Delete the db.sqlite3
- Uninstalled Django old verison
- Install latest version of Django with “pip install django”
- Delete all migrations from all apps of your project
Now run these commands in terminal
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
( provide super-user credentials )python manage.py runserver
Now finally login to admin panel with updated super-user's credentials and try to add record.
Same suggestions at this link by someone
Solution 30 - Python
django-2.2.7
This worked for me -
- Delete db.sqlite3.
- Within each app, within the migrations folder, delete everything other than _init_.py .
- Within each app,delete _pycache_ folder.
I am not sure if you had to do it for all apps or just the concerned app, but this worked for me.