本文介绍了IntegrityError:(1062,密钥重复项)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图清除数据库mydb,然后重新填充它,以查看对Django模型所做的某些更改的影响.然后所有这一切都发生了.我回滚到了较早的模型设置,但仍然仍然得到错误.

I was trying to purge my database, mydb, and repopulate it to see the effects of some changes to my Django model. Then all this happened. I rolled back to my earlier model set-up, but I still get the errors.

我不是MySQL专业人士,所以我不太清楚问题所在以及如何解决;我尝试用其他名称创建一个新的数据库,但是没有发生.我认为这是我的Django项目造成的问题.

I am no MySQL pro, and I can’t quite figure out the problem and what to do about it; I tried creating a new database with another name, but that didn’t happen. I assume that it is a problem created by my Django project.

这里是所有信息:



C:\Users...>python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table forum_category
Creating table forum_thread

Creating table forum_post

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'me'): admin
E-mail address: [email protected]
Password:
Password (again):
Superuser created successfully.
Traceback (most recent call last):
  File "manage.py", line 14, in
    execute_manager(settings)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 438, in execute_manager utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 379, in execute self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 191, in run_from_argv self.execute(*args, **options.__dict__)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 220, in execute output = self.handle(*args, **options)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 351, in handle return self.handle_noargs(**options)
  File "C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py", line 109, in handle_noargs emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "C:\Python27\lib\site-packages\django\core\management\sql.py", line 190, in emit_post_sync_signal interactive=interactive, db=db)
  File "C:\Python27\lib\site-packages\django\dispatch\dispatcher.py", line 172, in send response = receiver(signal=self, sender=sender, **named)
  File "C:\Python27\lib\site-packages\django\contrib\auth\management\__init__.p ", line 51, in create_permissions content_type=ctype
  File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 138, in create return self.get_query_set().create(**kwargs)
  File "C:\Python27\lib\site-packages\django\db\models\query.py", line 360, in create obj.save(force_insert=True, using=self.db)
  File "C:\Python27\lib\site-packages\django\db\models\base.py", line 460, in save self.save_base(using=using, force_insert=force_insert, force_update=force_up
date)
  File "C:\Python27\lib\site-packages\django\db\models\base.py", line 553, in save_base result = manager._insert(values, return_id=update_pk, using=using)
  File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 195, in _insert return insert_query(self.model, values, **kwargs)
  File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1436, in insert_query return query.get_compiler(using=using).execute_sql(return_id)
  File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 791, in execute_sql cursor = super(SQLInsertCompiler, self).execute_sql(None)
  File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 735, in execute_sql cursor.execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\backends\util.py", line 34, in execute return self.cursor.execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\backends\mysql\base.py", line 86, in execute return self.cursor.execute(query, args)
  File "C:\Users\me\AppData\Roaming\Python\Python27\site-packages\MySQLdb\cursors.py", line 174, in execute self.errorhandler(self, exc, value)
  File "C:\Users\me\AppData\Roaming\Python\Python27\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue

django.db.utils.IntegrityError: (1062, "Duplicate entry '9-delete_category' for key 'content_type_id'")


#models.py

from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    title = models.CharField(max_length=80)

    class Meta:
        verbose_name_plural = "categories"
        permissions = (
            ("create_category", "Can create new categories"),
            ("edit_category",   "Can edit the titles of categories"),
            ("delete_category", "Can delete a category"),
            ("merge_category",  "Can merge multiple categories together"),
        )

class Thread(models.Model):
    creation_date       = models.DateTimeField()
    author              = models.ForeignKey(User)
    title               = models.CharField(max_length=80)
    category            = models.ForeignKey(Category)

    class Meta:
        ordering = ["-creation_date"]
        permissions = (
            ("create_thread",           "Create new threads"),
            ("edit_thread",             "Edit thread titles"),
            ("delete_thread",           "Delete threads"),
            ("merge_thread",            "Merge multiple threads together"),
            ("lock_thread",             "Lock threads"),
            ("unlock_thread",           "Open locked threads"),
            ("ban_user_in_thread",      "Ban user from post in thread"),
            ("timeout_user_in_thread",  "Ban user from posting in thread temporarily"),
            ("appoint_threadmin",       "Give a user mod-like permissions in a thread"),
        )

class Bookmark(models.Model):
    user            = models.ForeignKey(User)
    thread          = models.ForeignKey(Thread)

class Subscription(models.Model):
    user            = models.ForeignKey(User)
    thread          = models.ForeignKey(Thread)

class Post(models.Model):
    creation_date   = models.DateTimeField()
    author          = models.ForeignKey(User)
    thread          = models.ForeignKey(Thread)
    content         = models.TextField()

    class Meta:
        ordering = ["creation_date"]
        permissions = (
            ("create_post", "Can create new post"),
            ("edit_post",   "Can edit all users' posts"),
            ("delete_post", "Can delete posts"),
        )


+----------------------------+
| Tables_in_mydb             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_message               |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_session             |
| django_site                |
| forum_bookmark             |
| forum_category             |
| forum_post                 |
| forum_subscription         |
| forum_thread               |
+----------------------------+

mysql> select * from django_content_type;
+----+--------------+--------------+--------------+
| id | name         | app_label    | model        |
+----+--------------+--------------+--------------+
|  1 | permission   | auth         | permission   |
|  2 | group        | auth         | group        |
|  3 | user         | auth         | user         |
|  4 | message      | auth         | message      |
|  5 | content type | contenttypes | contenttype  |
|  6 | session      | sessions     | session      |
|  7 | site         | sites        | site         |
|  8 | log entry    | admin        | logentry     |
|  9 | category     | forum        | category     |
| 10 | thread       | forum        | thread       |
| 11 | bookmark     | forum        | bookmark     |
| 12 | subscription | forum        | subscription |
| 13 | post         | forum        | post         |
+----+--------------+--------------+--------------+

推荐答案

Django自动在每个模型上都创建很少的默认权限,它们是:adddeletechange.由于尝试创建具有相同名称的权限,因此出现完整性错误.只需从您的元描述中删除delete_***,一切就可以了.

Django automatically creates few default permissions on every model, these are: add, delete and change. You are getting integrity error because you are trying to create permissions with the same name. Just remove delete_*** from your Meta description and everything should be ok.

这篇关于IntegrityError:(1062,密钥重复项)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 03:26