我一直遵循官方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
答案 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)
你去了。
答案 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 )
更多信息
谢谢
答案 6 :(得分:2)
即使升级到最新的Django 2.2.12并运行migrate
或official 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.
这是我的骇客:
sqlite3 my_db.db .dump > my_db.sql
__old" ("id")
替换为" ("id") DEFERRABLE INITIALLY DEFERRED
sqlite3 my_db.db < my_db.sql
答案 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)
这是我为解决此问题所做的事情:
转到虚拟环境并安装django@2.1.7
pip install django == 2.1.7
删除根文件夹中的db.sqlite3文件
重新运行迁移:
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.sqllite3
和makemigrations
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
这就解决了上面的问题
答案 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)
要轻松解决此问题,请遵循以下步骤:
pip install django==2.1.5
python manage.py makemigrations
,然后再迁移python manage.py migrate
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)
步骤:
从您的ENV卸载当前的Django。只需删除文件夹“ anaconda3 / envs / yourenv / lib / python3.7 / site-packages / Django所有版本。” *注意:仅对于Anaconda用户,其他用户应了解如何从ENV卸载软件包。
转到Github.com/django/django。
将存储库下载为zip文件。
提取邮政编码。
切换到您的ENV。
输入提取的文件夹。
运行“ python setup.py install”并安装Django。
删除先前的db.sqlite3文件。现在,再次应用迁移以创建新的db.sqlite3文件。
*注意:我不知道如何修复以前的dbfile并防止数据丢失。所以,请告诉我您是否知道。
恭喜!现在工作正常。
从Django官方发行版更新到1月的最新django。
答案 28 :(得分:0)
如果您不想更改Django版本,则必须更改数据库。 使用PostgreSQL我的建议。 问题将在进行迁移和迁移后解决。
答案 29 :(得分:-1)
将Django的版本从2.1升级到更高版本。我升级到2.1.8。 为我工作!
干杯.....
答案 30 :(得分:-1)
我在命令行上只做了4件事,它解决了我的问题。
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 }],
},
];
}, []);
py manage.py makemigrations
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
希望它必须解决您的问题:)