2012-07-13 57 views
2

我在我的Django项目中有以下2个应用程序。一个应用程序(播放器)具有引用其他应用程序(团队)的ForeignKey。Django models.ForeignKey外键约束

应用1 - 播放器/ models.py

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

应用2 - 团队/ 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. 删除数据库,并创建一个新的具有相同的名称。

  3. 恢复我的分贝。

    mysql -u root -p MYDB < MYBACKUP.SQL

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

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

我认为这些错误必须与外国关键约束,但我不知道如何解决它。

我知道这是一口,但任何意见将不胜感激。如果有的话,我会在明天发布我的发现。

在此先感谢!

+0

有你'蟒蛇manage.py syncdb'? – mariusnn 2012-07-13 03:29:00

+0

你应该看看南一旦你已经修复这个 – 2012-07-13 07:33:24

+0

@mariusnn是的,我可以'syncdb'罚款,并使用管理控制台来管理一切。 – markhops 2012-07-13 13:16:06

回答

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