【问题标题】:Django DecimalField lookups with MySQL not working使用 MySQL 的 Django DecimalField 查找不起作用
【发布时间】:2010-07-10 01:03:31
【问题描述】:

我正在从一个遗留数据库迁移数据,该数据库有许多主键定义如下的表:

`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”可能会失败。

【问题讨论】:

    标签: mysql django orm types decimal


    【解决方案1】:

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

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

    【讨论】:

    • 您应该接受自己的答案,以便其他人知道已找到解决方案。
    • 完成,谢谢。 StackOverflow 会在接受您自己的答案时施加等待时间,否则我会早点完成 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    相关资源
    最近更新 更多