Django DecimalField查找MySQL无法正常工作

时间:2010-07-10 01:03:31

标签: mysql django orm types decimal

我正在从具有许多表的旧数据库迁移数据,其中主键定义如下:

`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控制台,查询将成功。我想它必须在堆栈的各个级别(ORM - > DB驱动程序 - >服务器)处理DECIMAL类型。这似乎是相关的,但到目前为止我还没有幸运过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 个答案:

答案 0 :(得分:1)

找到一个解决方案 - 将Decimal参数强制转换为整数并使用%s作为param占位符:

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