【问题标题】:IntegrityError at /accounts/signup/ in djangoDjango 中 /accounts/signup/ 的 IntegrityError
【发布时间】:2015-03-31 07:38:59
【问题描述】:

我刚刚在 ubuntu 14.04 服务器上使用 apache 部署了我的 django 站点。 正在访问该站点。但是当我以用户身份注册时,它会创建用户,但无法创建与 myuser 一对一关系的用户配置文件。另外,我正在使用自定义用户模型。它在注册时引发的错误是:

Cannot add or update a child row: a foreign key constraint fails (`ilog_prod_db`.`myuserprofile_myuserprofile`, CONSTRAINT `myuserprofile_myuserp_myuser_id_6ad6f704425ed359_fk_auth_user_id` FOREIGN KEY (`myuser_id`) REFERENCES `auth_user` (`id`))

关键是,在我的开发机器(windows7)上,该网站使用相同的代码运行良好。另外,数据库的设置是完全一样的,即在这两个地方我都使用 InnoDB 作为数据库的数据库引擎。

可能是什么问题。任何指针将不胜感激。谢谢。

追溯:

Environment:


Request Method: POST
Request URL: http://www.industrylogger.com/accounts/signup/

Django Version: 1.7.2
Python Version: 3.4.0
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'enterprise',
 'accounts',
 'nodes',
 'message',
 'myuserprofile',
 'enterprise_profile',
 'activities',
 'search',
 'imagekit')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/sp/webapps/ilog_dev/accounts/views.py" in signup
  24.                                          password=password,)
File "/home/sp/webapps/ilog_dev/accounts/models.py" in create_myuser
  93.         user.save(using=self._db)
File "/home/sp/webapps/ilog_dev/accounts/models.py" in save
  152.             super(MyUser, self).save(*args, **kwargs)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/base.py" in save
  589.                        force_update=force_update, update_fields=update_fields)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/base.py" in save_base
  626.                                    update_fields=update_fields, raw=raw, using=using)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/dispatch/dispatcher.py" in send
  198.             response = receiver(signal=self, sender=sender, **named)
File "/home/sp/webapps/ilog_dev/myuserprofile/models.py" in create_user_profile
  121.         MyUserProfile.objects.create(myuser=instance)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/manager.py" in manager_method
  92.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/query.py" in create
  372.         obj.save(force_insert=True, using=self.db)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/base.py" in save
  589.                        force_update=force_update, update_fields=update_fields)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/base.py" in save_base
  617.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/base.py" in _save_table
  698.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/base.py" in _do_insert
  731.                                using=using, raw=raw)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/manager.py" in manager_method
  92.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/query.py" in _insert
  921.         return query.get_compiler(using=using).execute_sql(return_id)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/models/sql/compiler.py" in execute_sql
  920.                 cursor.execute(sql, params)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/backends/utils.py" in execute
  81.             return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/backends/utils.py" in execute
  65.                 return self.cursor.execute(sql, params)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/mysql/connector/django/base.py" in execute
  135.         return self._execute_wrapper(self.cursor.execute, query, args)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/mysql/connector/django/base.py" in _execute_wrapper
  121.                         utils.IntegrityError(err.msg), sys.exc_info()[2])
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/utils/six.py" in reraise
  658.             raise value.with_traceback(tb)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/mysql/connector/django/base.py" in _execute_wrapper
  115.             return method(query, args)
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/mysql/connector/cursor.py" in execute
  507.                 self._handle_result(self._connection.cmd_query(stmt))
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/mysql/connector/connection.py" in cmd_query
  722.         result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/mysql/connector/connection.py" in _handle_result
  640.             raise errors.get_exception(packet)

Exception Type: IntegrityError at /accounts/signup/
Exception Value: Cannot add or update a child row: a foreign key constraint fails (`ilog_prod_db`.`myuserprofile_myuserprofile`, CONSTRAINT `myuserprofile_myuserp_myuser_id_6ad6f704425ed359_fk_auth_user_id` FOREIGN KEY (`myuser_id`) REFERENCES `auth_user` (`id`))

【问题讨论】:

  • 尝试编写重现问题的最少代码。没有任何代码很难调试这个问题。
  • 尝试更改数据库名称,然后运行python manage.py syncdb 来构建表。如果它在那之后工作,那么这是数据库架构的问题
  • 在我的开发机器中,我只是尝试更改数据库的名称并创建了一个全新的数据库。甚至它在那里运行良好。我的 ubuntu 服务器上的代码只是开发机器上代码的 git 克隆。
  • @marcel 我将使用回溯更新问题。看看它是否有帮助。因为要显示代码,我将不得不更新很多代码。请调查一下
  • @Basic & @ Marcel Meiber,我认为问题出在 mysql 表和数据库模式而不是 django 代码上。请提出一些建议

标签: mysql django innodb ubuntu-14.04 myisam


【解决方案1】:

从问题的 cmets 看来,您的 django 模型和数据库架构不同步。如果可以,只需删除数据库并重新创建即可。如果那里有重要数据...

首先备份您的生产数据库

根据您使用的 django 版本,数据库同步的行为会有所不同。

Django

python manage.py syncdb 命令可用于将任何缺失的架构信息添加到您的数据库中。如果您的问题源于您向模型添加了新表或字段/约束已被删除,这可能会修复架构。

它不会删除任何旧字段或迁移任何数据,因此您很可能需要在之后进行一些手动编辑。

Django >= 1.7

1.7 引入了新的python manage.py migrate (Docs) 命令,更加智能。随着模型的更改,会创建迁移。当需要将旧数据库与新模型内联时,会将迁移应用到数据库。

这更加灵活,允许根据需要升级/降级数据库版本。

缺点是您需要随时进行迁移(或之后手动创建它们)。有关详细信息,请参阅文档

在任何一种情况下,如果模型太不同步或者您没有适当的迁移,您将需要做一些手动工作以使数据进入 django 所需的状态。

【讨论】:

  • 但更改数据库仅对我第一次注册有帮助。当我尝试注册为第二个测试用户时,显示了相同的错误,我什至尝试将表更改为 MyISAM,即使显示错误并且无法完成。现在要让它工作,我必须将默认数据库引擎更改为 myISAM 并再次创建数据库。现在它的工作,但我不能继续这种方式很长时间。建议我在这种情况下应该怎么做。请给我推荐合适的。
  • 另外,想补充一点,Windows 7 开发机器上的相同转换可以完美运行。我无法理解问题从哪里开始以及它的影响是什么。
  • 好的,让我们比较一下你的模型和你的数据库表。您能否编辑您的问题以包含以下输出:EXPLAIN 用于 mysql (Docs) 中的 2 个用户表和 2 个用户模型?另外,您使用的是哪个版本的 django?
猜你喜欢
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2013-11-25
  • 2014-08-23
  • 2016-01-28
  • 1970-01-01
  • 2021-03-05
相关资源
最近更新 更多