【发布时间】: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