2015-06-28 128 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'錯誤。 –

相關問題