Django models.ForeignKey外键约束

时间:2012-07-13 03:20:07

标签: django django-models

我的Django项目中有以下2个应用程序。一个app(播放器)有一个ForeignKey引用另一个app(团队)。

App 1 - players / models.py

class Player(models.Model):
    name = models.CharField(max_length=100)
    team = models.ForeignKey(Team)

App 2 - teams / models.py

class Team(models.Model):
    name = models.CharField(max_length=100)

问题#1 - 一切似乎都有效,但当我尝试运行manage.py reset teams时,我收到以下错误:

Error: Error: users couldn't be reset. Possible reasons:
* The database isn't running or isn't configured correctly.
* At least one of the database tables doesn't exist.
* The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlreset users'. That's the SQL this command wasn't able to run.
The full error: (1217, 'Cannot delete or update a parent row: a foreign key constraint fails')

我确保我的所有表都是InnoDB。我看到有人建议使用SET FOREIGN_KEY_CHECKS=0作为修正,但我不确定如何最好地将其用于manage.py rest

问题#2 - 当我执行mysqldump时,我无法在没有遇到错误的情况下恢复MySQL数据库。我的基本程序如下:

  1. 转储我的数据库。

      

    mysqldump --user = root --password = pass --result-file = MYBACKUP.SQL --compact MYDB

  2. DROP数据库,并创建一个具有相同名称的新数据库。

  3. 恢复我的数据库。

      

    mysql -u root -p MYDB< MYBACKUP.SQL

  4. 就是这样。当我第一次尝试恢复时,它会给我这个错误     ERROR 1005(HY000)第12行:无法创建表'MYDB.auth_group_permissions'(错误号:150)

    当我尝试恢复第二个(及后续)时间时,它会使它更远一行,但它给了我这个错误:     第3行的错误1050(42S01):表'auth_group'已存在

    我认为这些错误与外键约束有关,但我不确定如何修复它。

    我知道这是满口的,但任何建议都会非常感激。如果有的话,明天我会在这里发布我的发现。

    提前致谢!

1 个答案:

答案 0 :(得分:0)

问题2的解决方案 - 所以我的转储然后恢复我的数据库的问题与我如何使用mysql转储有关 - --compact标志导致问题。

这一行...

  

mysqldump --user = root --password = pass --result-file = MYBACKUP.SQL - compact MYDB

......应该......

  

mysqldump --user = root --password = pass --result-file = MYBACKUP.SQL MYDB