2014-07-14 83 views
4

我得到這個錯誤(1062, "Duplicate entry '0' for key 'PRIMARY'")。這發生在我將Django應用程序從sqlite3遷移到MySQL之後。下面是有關表:(1062,「重複鍵'0',鍵爲'PRIMARY'」)

mysql> describe meddy1_specialization; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(30) | NO |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.01 sec) 

這裏是模型:

class Specialization(models.Model): 
    name = models.CharField(max_length=30) 

    def __unicode__(self): 
     return self.name 

這是在表中的數據:

mysql> select * from meddy1_specialization; 
+----+--------------------+ 
| id | name    | 
+----+--------------------+ 
| 1 | Dentist   | 
| 2 | Dermatologist  | 
| 3 | Primary Care  | 
| 4 | Ophthalmologist | 
| 5 | Pediatrician  | 
| 6 | Orthopedist  | 
| 7 | Ear, Nose & Throat | 
| 8 | Gynecologist  | 
| 9 | test    | 
| 13 | test    | 
| 14 | test1    | 
+----+--------------------+ 
11 rows in set (0.00 sec) 
+1

如果錯誤發生在你遷移表之後,或許你應該說出你實際正在做什麼*錯誤發生時? –

+0

生成錯誤的'insert'或'update'語句是什麼? –

+0

@GordonLinoff所以我使用Django,它隱藏了插入語句/照顧它在後臺。你可以看看我的models.py模型。另外,當我嘗試從控制檯使用MySQL插入語句手動添加數據時,它可以工作。但是當我嘗試從Django管理控制檯添加專門化時,它給了我錯誤,這也是本文的標題。 – maahd

回答

0

你能在你的MySQL數據庫的增量哪些檢查數字在? 似乎mysql正試圖插入一個具有相同ID的行。

+0

是的,我檢查了這一點,並告訴MySQL在上面的例子中將'id'從'14'的位置增加。沒有工作。然後我刪除了'id'列並重新添加。沒有工作。我用truncate刪除所有數據的表並重新創建。沒有工作... – maahd

+0

如果您嘗試通過MySQL自行插入一行。這是否工作或返回錯誤? – Eagllus

0

確保在嘗試遷移之前target_table爲空...首先從目標表中刪除全部。錯誤可能是由重複的一個id號引起的,即使它是= 0(新記錄的默認值)。嘗試明確定義每個記錄的每個ID號

在你的情況下,從sqlite3導出到script.sql文件,然後找到數據並將其添加到腳本中;

insert into `meddy1_specialization` (`id`, `name`) VALUES 
(1 'Dentist'), 
(2,'Dermatologist'), 
(3,'Primary Care'), 
(4,'Ophthalmologist'), 
(5,'Pediatrician'), 
...--plug in all your values in this fashion 

另一個場景,出現這種情況是在遷移信息從一個mSQL的表到另一個...再次明確定義可能需要......人們可以在源表的唯一ID和自動添加一列然後增加這個數據然後使用這個列更容易遷移...

相關問題