Django-没有这样的表格:main.auth_user__old

时间:2018-12-05 16:55:56

标签: python django python-3.x django-models

我一直遵循官方Django文档中的first app tutorial,并尝试保存通过管理页面进行的某些更改时收到此错误。我对此进行了一些研究,但是我能够找到的可能解决方案(例如迁移数据库)根本行不通。如果您想查看代码的某些特定部分,请告诉我。

以下是错误:

  在/ admin / polls / question / 1 / change /处的

OperationalError没有这样的表:   main.auth_user__old请求方法:POST请求   网址:http://127.0.0.1:8000/admin/polls/question/1/change/ Django   版本:2.1.4异常类型:OperationalError异常值:否   这样的表:main.auth_user__old异常   位置:/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py   在执行中,第296行Python   可执行文件:/ Users / gfioravante / Projects / test_app / ta_env / bin / python3   Python版本:3.7.1 Python路径:
  ['/ 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']   服务器时间:2018年12月5日,星期三16:45:00 +0000

和回溯:

  

环境:

     

请求方法:POST请求URL:   http://127.0.0.1:8000/admin/polls/question/1/change/

     

Django版本:2.1.4 Python版本:3.7.1已安装的应用程序:   ['polls.apps.PollsConfig','django.contrib.admin',   'django.contrib.auth','django.contrib.contenttypes',   'django.contrib.sessions','django.contrib.messages',   'django.contrib.staticfiles']已安装的中间件:   ['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']

     

跟踪:

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py”   在_execute中     85. return self.cursor.execute(sql,params)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py”   在执行     296. return Database.Cursor.execute(self,query,params)

     

上面的异常(没有这样的表:main.auth_user__old)是   以下异常的直接原因:

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py”   在内部     34. response = get_response(request)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py”   在_get_response中     126. response = self.process_exception_by_middleware(e,request)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py”   在_get_response中     124. response = wrapd_callback(request,* callback_args,** callback_kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py”   在包装     604. return self.admin_site.admin_view(view)(* args,** kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py”   在_wrapped_view中     142. response = view_func(request,* args,** kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py”   在_wrapped_view_func中     44. response = view_func(request,* args,** kwargs)

     

文件   内部的“ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py”     223. return view(request,* args,** kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py”   在change_view中     1640. return self.changeform_view(request,object_id,form_url,extra_context)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py”   在_wrapper中     45. return bound_method(* args,** kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py”   在_wrapped_view中     142. response = view_func(request,* args,** kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py”   在changeform_view中     1525. return self._changeform_view(request,object_id,form_url,extra_context)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py”   在_changeform_view中     1571. self.log_change(请求,new_object,change_message)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py”   在log_change     826. change_message = message,

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py”   在log_action中     35. change_message = change_message,

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py”   在manager_method中     82. return getattr(self.get_queryset(),name)(* args,** kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py”   在创造     413. obj.save(force_insert = True,使用= self.db)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py”   在保存     718. force_update = force_update,update_fields = update_fields)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py”   在save_base中     748.更新= self._save_table(原始,cls,force_insert,force_update,使用,update_fields)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py”   在_save_table中     831. result = self._do_insert(cls._base_manager,using,fields,update_pk,raw)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py”   在_do_insert中     869. using = using,raw = raw)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py”   在manager_method中     82. return getattr(self.get_queryset(),name)(* args,** kwargs)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py”   在_insert中     1136. return query.get_compiler(using = using).execute_sql(return_id)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/sql/compiler.py”   在execute_sql中     1289. cursor.execute(sql,params)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py”   在执行     100. return super()。execute(sql,params)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py”   在执行     68. return self._execute_with_wrappers(sql,params,many = False,executor = self._execute)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py”   在_execute_with_wrappers中     77. return executor(sql,params,many,context)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py”   在_execute中     85. return self.cursor.execute(sql,params)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py”   在退出中     89.从exc_value提高dj_exc_value.with_traceback(traceback)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py”   在_execute中     85. return self.cursor.execute(sql,params)

     

文件   “ /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py”   在执行     296. return Database.Cursor.execute(self,query,params)

     

异常类型:/ admin / polls / question / 1 / change /处的OperationalError   异常值:没有这样的表:main.auth_user__old

34 个答案:

答案 0 :(得分:37)

我自己碰到了这个问题,它似乎与https://code.djangoproject.com/ticket/29182有关。目前,您只需将sqlite的版本降级到2.6之前的版本(例如2.5.1)

答案 1 :(得分:8)

问题是由SQLite 3.26.0中ALTER TABLE RENAME语句的修改行为引起的(请参见compatiblity note)。他们还引入了PRAGMA legacy_alter_table = ON语句,以保持与先前版本的兼容性。即将发布的Django release 2.1.5利用了前面提到的语句作为修补程序。预计于2019年1月1日。

答案 2 :(得分:6)

只是这样做,我解决了这个问题

`pip install Django --upgrade`

然后

python manage.py migrate

python manage.py makemigrations app

python manage.py migrate

最后

答案 3 :(得分:5)

对我来说,这是我的Django版本(即2.1) 安装更高版本(出于某些原因,我使用2.1.5) **删除db.sqlite3,以及迁移文件夹中除 init .py外的所有内容 运行命令:

pip install django==2.1.5 --upgrade
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

答案 4 :(得分:5)

  1. 首先,停止服务器并删除db.sqlite3。
  2. 然后,您需要运行: python manage.py makemigrations python manage.py迁移
  3. 运行此命令后,您需要创建超级用户。去创造 超级用户,运行: python manage.py createsuperuser 在此处输入超级用户详细信息。
  4. 再次运行服务器。

你去了。

答案 5 :(得分:3)

转到此文件夹django / db / backends / sqlite3

将“ schema.py”文件备份到另一个文件夹

在文本编辑器中打开原始schema.py

您可以看到

之类的代码段
    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__()

评论它们并粘贴以下代码段

     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__()

这对我有用。 (schema.py的备份是万一工作出错的话; D    )

更多信息

https://github.com/django/django/pull/10733/commits/c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f#diff-0c8f495bfee773ab7b5409533bd6d7ef

谢谢

答案 6 :(得分:2)

即使升级到最新的Django 2.2.12并运行migrateofficial database rebuild script,我也遇到__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.

这是我的骇客:

  1. 将数据库内容转储到sql:sqlite3 my_db.db .dump > my_db.sql
  2. 对sql输出运行正则表达式,将__old" ("id")替换为" ("id") DEFERRABLE INITIALLY DEFERRED
  3. 删除旧的数据库文件
  4. 将修改后的sql加载到新数据库中:sqlite3 my_db.db < my_db.sql
  5. ???和利润

答案 7 :(得分:2)

对于上述问题和解决方法是:

1)转到终端并输入' pip install django == 2.1.7 '或最新版本的django

2)安装后,在终端中输入“ python manage.py makemigrations ”,然后输入“ python manage.py migration

3)在终端中,使用代码“ python manage.py runserver

启动服务器

4)使用密码登录到管理服务器并添加产品,它将成功添加产品。

答案 8 :(得分:2)

同一件事发生在我身上,非常令人沮丧。我在自己的环境中使用anaconda,但发现如果不立即重新安装最新版本的sqlite,就无法删除sqlite。尝试使用较旧版本的django似乎也不起作用。对我而言唯一有效的解决方案是使用PostgreSQL数据库。这当然不是理想的选择,但是我计划将来使用PostgreSQL数据库,因此这不会完全浪费时间。如果您发现自己和我以前在同一地方,那么如果您想知道如何将PostgreSQL数据库与django项目连接起来,那么video可能会有所帮助。

您需要先安装postgreSQL数据库,然后才能在settings.py中进行实际更改,安装更多的是在所有选项上单击“下一步”。但是,请记住安装期间使用的用户名和密码。

答案 9 :(得分:1)

我安装了django /将其降级到2.2版本,删除了django 3.x

pip install django==2.2

然后删除db.sqlite文件,然后

我尝试了

python manage.py makemigrations,
python manage.py migrate 
python manage.py creatingsuperuser. 

答案 10 :(得分:1)

我通过将Django从2.1.4升级到2.1.5解决了问题,但是我不得不重新构建项目,因为该错误似乎与使用旧版本的插入数据库中的对象有关。 Django。

答案 11 :(得分:1)

更新Django版本: pip install django-升级 然后

./manage.py makemigration
./manage.py migrate
./manage.py runserver

答案 12 :(得分:1)

这是我为解决此问题所做的事情:

  1. 转到虚拟环境并安装django@2.1.7

    pip install django == 2.1.7

  2. 删除根文件夹中的db.sqlite3文件

  3. 在您的根文件夹中创建新的db.sqlite3
  4. 重新运行迁移:

    python3 manage.py makemigrations

    python3 manage.py migration

现在它应该可以正常工作

答案 13 :(得分:1)

1> 升级 Django pip install Django --upgrade

2> 删除项目根文件夹中的“db.sqlite3”文件。

3> 通过重新运行迁移在您的根文件夹中创建新的 db.sqlite3。 python3 manage.py makemigrations

4> 迁移 python3 manage.py migrate

它可能只适用于此,或者如果它被删除,您可能需要创建一个新的超级用户。

5> 使用

检查您的超级用户
python manage.py shell
from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)   

如果 <QuerySet []> 出现,则没有用户。 否则请检查您的用户是否存在。

6> 如果您的用户不存在,请使用 python manage.py createsuperuser

答案 14 :(得分:0)

对于那些无法通过以上答案解决此错误的人,如果您将应用程序命名为“ main”,则可能由于相同的应用程序名称问题而导致此错误。因此,尝试将您的应用名称“ main”更改为另一个。

答案 15 :(得分:0)

我遇到了相同的问题,并通过以下操作解决了该问题:

1)获取最新的django版本

2)获取最新的SQL Lite版本

3)从您的项目中删除db.sqlite3文件

4)对models.py进行一些更改(例如,更改字段的大小)

5)通过运行db.sqllite3makemigrations

来生成新的migrate commands文件

6)将新创建的db.sqllite3文件导入SQL Lite

答案 16 :(得分:0)

django-2.2.7
这对我有用-

1)删除 db.sqlite3
2)在每个应用程序的 migrations 文件夹中,删除除 __ init __。py 之外的所有内容。
3)在每个应用程序中,删除 __ pycache __ 文件夹。

我不确定您是否必须对所有应用程序还是仅对相关应用程序执行此操作,但这对我有用。

答案 17 :(得分:0)

我已经使用以下方法解决了这个问题:

1)删除db.sqlit3

2)应用程序的目录删除其中的所有内容 pycache

3)manage.py makemigrations,manage.py迁移,manage.py createsuperuser,然后再manage.py运行服务器。

答案 18 :(得分:0)

保留 django 2.1.5 版

This issue is adressed only in this version of Django
  • pip install django==2.1.5
  • 删除 SQLite 数据库
  • 运行迁移
  • 启动服务器 python manage.py runserver

这就解决了上面的问题

答案 19 :(得分:0)

请检查您是否没有从您的应用中删除迁移文件夹 如果删除尝试恢复文件夹并删除迁移文件或 如果删除永久创建应用程序并复制粘贴您的工作和

然后

1. Delete db.sqlite3
2. python manage.py makemigrations
3. python manage.py migrate
4. python manage.py createsuperuser 

HTH :)

答案 20 :(得分:0)

我通过更改一些模型解决了这个问题。我有一个命名项目和一个命名项目。数据库表感到困惑,并向我抛出此错误。

答案 21 :(得分:0)

您需要升级Django,此PR https://github.com/django/django/pull/10733

中已解决此问题

答案 22 :(得分:0)

要轻松解决此问题,请遵循以下步骤:

  1. 保留Django 2.1.5版(此版本中解决的问题) pip install django==2.1.5
  2. 删除SQLite数据库
  3. 再次迁移python manage.py makemigrations,然后再迁移python manage.py migrate
  4. 启动服务器python manage.py runserver

完成!

答案 23 :(得分:0)

您可以做的就是简单地使用sqlite3浏览器进入数据库,并使用各自的属性将引用表从auth_user__old更改为auth_user。它对我有用,我的项目也很好。

答案 24 :(得分:0)

除了有2个sqlite数据库和自定义数据库路由器外,我遇到了相同的问题。我设法通过将Django降级到1.11.20来使其正常工作,而无需重新创建数据库。

答案 25 :(得分:0)

我刚刚尝试使用最新版本的Django解决问题,但问题仍然存在。 直到他们没有使用Django和Sqlite3调试该问题时,才使用Django的较早版本。您可以考虑使用1.10.5版(使用命令pip install --upgrade django == 1.10.5)

答案 26 :(得分:0)

我感到非常兴奋,因为这是我第一次感到轻松自在地回答问题。

我看到您已经设法修复它,但是对于其他不想降级任何软件的人,您可以进入您的settings.py文件,并在DATABASES字典中,您可以可以将.sqlit3替换为.postgresql,并在其下方将db.sqlit3更改为db.sql。这会将您的默认数据库切换为使用postgreSQL。

这样做时,您需要pip install psycopg2

删除您的db.sqlite3文件(如果有/不在乎丢失其中的内容)以及应用迁移文件夹中所有非__init__.py文件的内容。完成所有这些操作后,就可以运行python manage.py makemigrations和python manage.py migrate,然后它应该可以工作了:)

希望我能够帮助别人!

答案 27 :(得分:0)

步骤:

  1. 从您的ENV卸载当前的Django。只需删除文件夹“ anaconda3 / envs / yourenv / lib / python3.7 / site-packages / Django所有版本。” *注意:仅对于Anaconda用户,其他用户应了解如何从ENV卸载软件包。

  2. 转到Github.com/django/django。

  3. 将存储库下载为zip文件。

  4. 提取邮政编码。

  5. 切换到您的ENV。

  6. 输入提取的文件夹。

  7. 运行“ python setup.py install”并安装Django。

  8. 删除先前的db.sqlite3文件。现在,再次应用迁移以创建新的db.sqlite3文件。

*注意:我不知道如何修复以前的dbfile并防止数据丢失。所以,请告诉我您是否知道。

  1. 运行服务器。

恭喜!现在工作正常。

从Django官方发行版更新到1月的最新django。

答案 28 :(得分:0)

如果您不想更改Django版本,则必须更改数据库。 使用PostgreSQL我的建议。 问题将在进行迁移和迁移后解决。

答案 29 :(得分:-1)

将Django的版本从2.1升级到更高版本。我升级到2.1.8。 为我工作!

干杯.....

答案 30 :(得分:-1)

我在命令行上只做了4件事,它解决了我的问题。

  1. ctrl + c (停止服务器)
  2. const transform = things => things.reduce((acc, { name, value, group }) => { const existingGroup = acc.find(g => g.name === group) || {}; return [ ...acc.filter(g => g.name !== group), { ...existingGroup, name: group, children: [...(existingGroup.children || []), { name, value }], }, ]; }, []);
  3. py manage.py makemigrations
  4. py manage.py migrate(启动服务器)

答案 31 :(得分:-1)

请将django版本降级到1.5,或者如果您不想降级版本,则可以在本地更改schema.py,应用补丁程序并运行makemigrations + migration命令,但是不建议这样做。

答案 32 :(得分:-1)

  

是的,我在Django 2.1.4上有相同的错误

     
    

OperationalError     (没有这样的表:main.auth_user__old)

  
     

我删除了Django 2.1.4,安装了Django 1.11.16,问题解决了

安装Django 1.11.16对我没有用。它将显示“ ModuleNotFoundError”和“ FileNotFoundError”。然后,我打开文件“ db.sqlite3”,复制具有结构和数据的表“ auth_user”和“ django_content_type”,将表名更改为“ auth_user__old”和“ django_content_type__old”。有效!我希望这对困惑的人有用。

答案 33 :(得分:-1)

打开=> / YourAppFolder / migrations / 您会看到正在迁移文件,就像' 0001_initial.py '删除了所有这些文件一样文件。并运行以下命令 1- python manage.py makemigrations 2- python manage.py migrate 希望它必须解决您的问题:)