Я мигрирую данные из устаревшей базы данных, в которой есть много таблиц с первичными ключами, определенными как:
`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 -> драйвер БД -> сервер). Казалось, что это было актуально, но мне пока не повезло с 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 () может завершиться неудачей.