LINUX.ORG.RU

id в таблице присваивается не по порядку

 , ,


0

1

В терминале Python shell добавляю в таблицу объекты, но id присваивается не по порядку. Как это исправить?

До этого из таблицы было удалено несколько объектов.

 >>> Programmer.objects.all().values()
<QuerySet [{'id': 1, 'name': 'Linus Torvalds','occupation': 'Software enginner'}, 
{'id': 2, 'name': 'Tim Cook', 'occupation': 'CEO'}, 
{'id': 3, 'name': 'Elon Musk', 'occupation': 'Entrepreneur, engineer'}]>

 >>> p4=Programmer(name='Mark Zuckerberg')
 >>> p4.save()
 >>> Programmer.objects.all().values()
<QuerySet [{'id': 1, 'name': 'Linus Torvalds', 'occupation': 'Software enginner'}, 
{'id': 2, 'name': 'Tim Cook', 'occupation': 'CEO'}, 
{'id': 3, 'name': 'Elon Musk', 'occupation': 'Entrepreneur, engineer'}, 
{'id': 15, 'name': 'Mark Zuckerberg', 'occupation': None}]> 

Переопределить поле id в модели обычным IntegerField'ом, и присваивать значения вручную.

provaton ★★★★★
()
Ответ на: комментарий от hibiscusM

Оно присваивается по порядку, но при удалении последний незанятый номер не обновляется. Если тебе нужно что-то пофиксить один раз, чтобы подрмедитировать на идущие подряд id, используй запрос

ALTER TABLE programmers AUTO_INCREMENT = 4;
Если хочешь, чтобы так было всегда, тогда вставляй id сам, без auto_increment, но ты не должен этого хотеть.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 2)

По порядку тебе и не нужно. Используй auto_increment и order by в селектах. Просто думай об id как n < n+m.

Deleted
()
Ответ на: комментарий от pawnhearts

Да, я знаю, что автоинкременты - это фишка бд. Но так как ОП она не нравится, я предложил способ как ее отключить, хотя это и гемор жуткий.

provaton ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.