2010-07-10 77 views
0

我從與主鍵許多表舊的數據庫遷移數據等被定義:Django的DecimalField查找與MySQL不工作

`id` decimal(26,0) 

id列將包含看起來像值:

20080313154354198004 
20081217165552136057 
2008080416222952067 
20060510151423191000 
20060510151423191000 
20070710143455874025 
200806239353171091 

做查詢:

Release.objects.raw("SELECT id from games_release where legacy_id = 2008050812286746069") 

有時會成功,有時失敗。在失敗的情況下,我可以從db.connection.queries中捕獲查詢,將其粘貼到MySQL控制檯中,查詢將成功。我想象的是DECIMAL類型是如何在堆棧的不同層次上處理的(ORM - > DB driver - > server)。這似乎是有關,但我還沒有與任何CAST運氣()爲止:

http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

上使查詢任何幫助的可靠工作大加讚賞。

編輯 其中的一塊拼圖我忘了提:我試圖對存儲在原先從舊錶拉到一個表查詢的十進制值。例如:

class OldModel(db.models): 
    id = models.DecimalField(decimal_places=0, max_digits=36) 

class NewModel(db.models): 
    id = models.DecimalField(decimal_places=0, max_digits=36) 

old = <some instance of OldModel> 
new = NewModel.objects.create(id=old.id) 

然後過了一段時間,試圖通過objects.raw()選擇「new」可能會失敗。

回答

1

找到了解決方案 - 投十進制參數爲整數,並使用%S作爲帕拉姆佔位符:

Release.objects.raw("SELECT id from games_release where legacy_id = %s", [int(uc.game_release_id)]) 
+0

你應該接受你自己的答案,讓其他人知道解決辦法已經找到。 – Mike 2010-07-10 07:15:10

+0

完成,謝謝。 StackOverflow在接受你自己的答案時強加一段等待時間,否則我會盡快完成它:) – 2010-07-12 01:36:08