2016-02-15 16 views
1

Django的小白Django的VS的MySQL的uuid這裏

我創建使用

customer_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 

遷移模型到MySQL後,我嘗試使用

insert into customer_customer (customer_id, ...) values (uuid(), ...) 

的將數據添加到MySQL的典範數據被正確地插入MySQL的一個獨特的代碼,但是,當我嘗試通過Django管理工具來顯示這個(此表送入用戶屬性),它拋出一個錯誤格式的UUID錯誤。

File "/usr/lib/python2.7/uuid.py", line 134, in __init__ 
raise ValueError('badly formed hexadecimal UUID string') 
ValueError: badly formed hexadecimal UUID string 

請討論是否有另一種直接在MySQL中創建種子數據的方法。

回答

1

一種用於存儲通用唯一標識符字段。使用Python的UUID 類。當上的PostgreSQL,此存儲在UUID數據類型,否則 在一個char(32)使用。

所以用MySQL django處理uuid,並將字段管理爲Char32。你不能使用本地MySQL uuid。

如果必須從MySQL側創建UUID ,在Django模型使用一個CharField,並填充它:

class MyModel(models.Model): 

    fld = models.CharField(max_length=36) 

然後保存時:

import uuid 
MyModel.fld = str(uuid.uuid4()) 

作爲默認:

fld = models.CharField(max_length=36, default=uuid.uuid4) 
+0

感謝Aviah的回覆。我希望保持原來的Django模型,但是能夠在MySQL中添加一些不會破壞Django的記錄。是否有可能這樣做? – Anurag

+0

不,你從MySQL中添加的場景是什麼? –

+0

LAMBDA的不能序列,所以這將阻止你創建這個模型任何遷移。您可以使用適當的功能定義和傳遞函數來代替,或者你可以甚至可能逃脫傳遞'uuid.uuid4',讓現場處理轉換爲'str'。 – knbk