Удалю не город, а ссылку на город(которого кстати нет в базе данных) из кортежа. И удаляю я её лишь в том случае, когда модели указано null=True, видимо это-то уже о чём-то говорит, как минимум о том, что эти данные потерять не очень страшно. В противном случае потеряется запись целиком (собственно, Вы так и рекомендуете делать).
Кортеж это не словарь, под кортежом я тут подразумеваю термин из реляционной алгебры и реляционных баз данных, эквивалент записи в таблице. (т.е. не python-овский кортеж)
Имена полей обычно формируются по определённым стандартам. Но бывает так, что проект вела цепочка разработчиков и каждый "внёс свой вклад". Проект огромный и необходимо будет потратить очень много времени на решение весьма трудоёмких задач.
Явное лучше неявного, возможно, но + к этому дороже(более приземлённое, трудоёмкое и зачастую неоправданное).
Вообще описанный мной алгоритм - это последняя инстанция. Я изначально написал, что работает медленно и казалось бы ЗАЧЕМ? mysql-> django orm -> postgresql с кучей проверок и стеком, количество запросов возрастает параллельно количеству внешних ключей, если можно написать более гуманный скрипт, который позволяет напрямую общаться между базами, что гораздо дешевле в плане времени, но при валидных данных, к сожалению данные далеко не всегда таковы.