Django MySQL 创建表时出现错误

3
我有一个和 Django 论坛上 这个问题 相似的问题。我该如何解决这个问题?

我的 User 模型也被扩展了,如下所示:

class Profile(models.Model):
    street_address = models.CharField(max_length=80, blank=True, null=True)
    city = models.CharField(max_length=80, blank=True, null=True)
    state = models.CharField(max_length=80, blank=True, null=True)
    zip = models.CharField(max_length=30, blank=True, null=True)
    country = models.CharField(max_length=50, blank=True, null=True)
    phone = models.CharField(max_length=50, blank=True, null=True)
    birth = models.DateField(blank=True, null=True)
    photo = models.ImageField(upload_to='media')
    user = models.OneToOneField(User,primary_key=True)

但我认为问题不在于模型,因为即使我从INSTALLED_APPS列表中移除包含该模型的应用程序,并运行manage.py migrate命令,它仍然会抛出相同的错误,即

django.db.utils.OperationalError: (1005, "Can't create table 'db.#sql-456_113' (errno: 150)")

不包括任何应用程序,它可以正常工作。任何线索都将非常有帮助。


你有用过python manage.py syncdb命令吗? - upaang saxena
2
它已被弃用,因此不再使用。我直接应用了 python manage.py migrate - Praful Bagai
1
我尝试过 python manage.py makemigration appname 然后是 python manage.py migrate,它可以工作。但我必须对每个应用程序都运行 python manage.py makemigration appname。如何一次性对所有应用程序进行 makemigrate? - Praful Bagai
1
第一次我按照以下步骤操作。第一步:运行 python manage.py makemigrations 命令,它提示说“未检测到任何更改”。然后进行第二步:运行 python manage.py migrate 命令,它创建了所有的表格,但在中途停止并抛出了与我在问题中指出的相同错误。 - Praful Bagai
1
对于我来说,为每个应用程序执行makemigration,然后运行migrate是有效的。但是,这是否需要针对每个单独的应用程序进行操作呢?如果我有20-30个应用程序,那么在所有应用程序上执行makemigration并不是一个可行的解决方案。 - Praful Bagai
显示剩余2条评论
1个回答

2

检查您数据库表的存储引擎。如此处所述,旧版 MySQL 使用的 MyISAM 存储引擎与实际的 InnoDB 存储引擎不兼容。因此,如果您的数据库在不同的表中使用了不同的存储引擎,并且您尝试创建外键,则可能会出现此错误。至少,在我的情况下是这样的 :) 希望这可以帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接