2010-07-10 78 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