2015-06-28 92 views
6

我有一个全新的MariaDB服务(版本:5.5.41-MariaDB),并为我的Django(1.8.2)应用程序创建了一个新的数据库。数据库默认使用innoDB创建。Django迁移:无法创建表errno:150

我有一个模式,看起来像这样:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, unique=True) # django's default user model 

当我运行python manage.py 迁移。我收到以下错误:

File "/home/vagrant/envs/leo/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute 
    self.errorhandler(self, exc, value) 
    File "/home/vagrant/envs/leo/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
django.db.utils.OperationalError: (1005, "Can't create table 'leo.#sql-bcd_1f' (errno: 150)"). 

我在做什么错,我该如何解决?

+0

看看我的答案在 http://stackoverflow.com/questions/29447863/django-mysql-error-creating-tables/37397470#37397470 也许有人可以用我的建议 – serguitus

回答

0

我设法降级到1.7.9的Django解决这个。降级后它马上工作

0

OneToOneField不需要独特的属性,就像这样:

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
+0

我试了一下没有独特= True属性,但有相同的问题 – CraigH

+0

您的项目或应用程序中是否有其他模型? – hongshuning

+0

是的,但我评论他们所有的疑难解答,没有运气 – CraigH

2

我在django 1.8下有同样的问题,唯一的区别是我使用的是MySQL而不是MariaDB。

将数据库的编码从utf8_unicode_ci更改为utf_general_ci解决了我的问题。

+0

你能解释如何做到这一点? –

3

当您不制作迁移文件时,也会发生此错误。实际迁移之前一定要运行makemigrations

python manage.py makemigrations <app_name> 
python manage.py migrate 
1

这种怪异的MySQL错误是explained here。我不确定你的Django应用程序如何触发它。

+0

运行'./manage.py migrate'时遇到同样的问题。 我的数据库中有MyISAM表,但默认引擎设置为InnoDB。 因此,所有新表都将被创建为InnoDB,导致了'1005'错误。 –

相关问题