Nor*_*age 55 python django django-models python-3.x
我正在关注官方Django文档中的第一个应用程序教程,并在尝试保存通过管理页面进行的一些更改时遇到此错误.我做了一些研究,但我能找到的可能的解决方案,比如迁移数据库,根本行不通.如果您想查看我的代码的某些特定部分,请告诉我.
以下是错误:
Operational错误在/ admin/polls/question/1 /更改/没有这样的表:main.auth_user__old请求方法:POST请求URL: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 in execute,第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/Frame /Python.framework/Version/3.7/lib/python3.7','/ usr/local/Cellar/python/3.7.1/Frame /Python.framework/Version = 37/lib/python3.7/lib-dénd','/ 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/1change /
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 "]
追溯:
在_execute 85中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py".返回self.cursor.execute(sql,params)
执行296中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py".返回Database.Cursor.execute(self,query, PARAMS)
上面的异常(没有这样的表:main.auth_user__old)是以下异常的直接原因:
内部34中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py"response = get_response(request)
在_get_response 126中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py".response = self.process_exception_by_middleware(e,request)
_get_response中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py"124. response = wrapped_callback(request,*callback_args,**callback_kwargs)
在包装器604中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py".返回self.admin_site.admin_view(查看)(*args,**kwargs)
_wrapped_view中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py"142. response = view_func(request,*args,**kwargs)
_wrapped_view_func中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py"44.response = view_func(request,*args,**kwargs)
内部223.文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py"返回视图(request,*args,**kwargs)
在change_view 1640中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py".return self.changeform_view(request,object_id,form_url,extra_context)
在_wrapper 45中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py".返回bound_method(*args,**kwargs)
_wrapped_view中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py"142. response = view_func(request,*args,**kwargs)
在changeform_view 1525中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py".return self._changeform_view(request,object_id,form_url,extra_context)
在_changeform_view 1571中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py".self.log_change(request,new_object,change_message)
在log_change 826中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py".change_message = message,
在log_action中提交文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py"35. change_message = change_message,
在manager_method 82中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py".返回getattr(self.get_queryset(),name)(*args,**kwargs)
创建413.文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py".obj.save(force_insert = True,using = self.db) )
保存718中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py".force_update = force_update,update_fields = update_fields)
在save_base 748中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py".更新= self._save_table(raw,cls,force_insert,force_update ,使用,update_fields)
在_save_table 831中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py".结果= self._do_insert(cls._base_manager,using,fields ,update_pk,raw)
在_do_insert 869中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py".using = using,raw = raw)
在manager_method 82中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py".返回getattr(self.get_queryset(),name)(*args,**kwargs)
在_insert 1136中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py".返回query.get_compiler(using = using).execute_sql(return_id )
execute_sql 1289中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/pyject3.7/site-packages/django/db/models/sql/compiler.py".zoid.execute(sql,params)
执行100中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py".返回super().execute(sql,params)
执行68中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py".返回self._execute_with_wrappers(sql,params,many = False,执行人= self._execute)
在_execute_with_wrappers中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py"77.return executor(sql,params,many,context)
在_execute 85中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py".返回self.cursor.execute(sql,params)
在出口 89中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py" .从exc_value中提取dj_exc_value.with_traceback(traceback)
在_execute 85中输入文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py".返回self.cursor.execute(sql,params)
执行296中的文件"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py".返回Database.Cursor.execute(self,query, PARAMS)
异常类型:/ error/polls/question/1/change/Exception值的OperationalError:没有这样的表:main.auth_user__old
小智 44
我自己也遇到过这个问题,它看起来与https://code.djangoproject.com/ticket/29182有关.现在,您可以将您的sqlite版本降级到2.6之前的版本(例如2.5.1)
小智 15
刚刚这样做并解决了问题:
pip install Django --upgrade
Run Code Online (Sandbox Code Playgroud)
然后:
python manage.py migrate
python manage.py makemigrations app
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
nur*_*diq 11
要轻松解决此问题,请遵循以下步骤:
pip install django==2.1.5
python manage.py makemigrations
,然后python manage.py migrate
python manage.py runserver
完成!
MIN*_* WU 11
这是我为解决此问题所做的工作:
进入虚拟环境并安装 django@2.1.7
pip install django==2.1.7
Run Code Online (Sandbox Code Playgroud)删除db.sqlite3
根文件夹中的文件。
db.sqlite3
在根文件夹中创建新的。重新运行迁移:
python3 manage.py makemigrations
python3 manage.py migrate
Run Code Online (Sandbox Code Playgroud)现在它应该可以正常工作了。
小智 9
该问题是由ALTER TABLE RENAME
SQLite 3.26.0 中的语句的修改行为引起的(请参阅兼容性说明).他们还介绍了该PRAGMA legacy_alter_table = ON
语句,以保持与以前版本的兼容性.即将发布的Django版本2.1.5使用前面提到的语句作为修补程序.预计2019年1月1日.
对我来说,它是从我的 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
Run Code Online (Sandbox Code Playgroud)
我通过将 Django 从 2.1.4 升级到 2.1.5 解决了这个问题,但我不得不重新重建项目,因为这个 bug 似乎与我使用旧版本的 Django 插入到数据库中的对象有某种关系。
小智 6
转到此文件夹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__()
Run Code Online (Sandbox Code Playgroud)
评论他们并粘贴以下代码片段
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__()
Run Code Online (Sandbox Code Playgroud)
这对我有用。(schema.py的备份是为了防止工作出错; D)
了解更多信息
谢谢
即使升级到最新的 Django 2.2.12 并运行官方数据库重建脚本后migrate
,我也遇到了相同的错误__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
小智 5
你去吧。