Уникальны ли числа? Они набраны?
SELECT num FROM table WHERE num IN (111,222,333,....500 numbers later..., 99999)
Если вы получите список чисел в БД, вы возьмете этот список, сравните его с вашим набором и возьмите разницу.
Большинство БД SQL будут принимать оператор SQL такого размера, который на самом деле достаточно производительный, и, если вас интересует только фактическое существование, БД, скорее всего, просто просканирует индекс и никогда не попадет в реальные строки (зависит от БД конечно).
Итак, попробуйте это и посмотрите, как это работает. Если ваши номера не проиндексированы, то вы обречены на врата - исправьте это тоже.
Addenda:
Проще говоря, если ваш номер уникален, вам нужно убедиться, что у вас есть индекс для столбцов этого номера в вашей базе данных. Если вы хотите, чтобы он оставался уникальным, вы можете сделать его уникальным индексом, но теперь это необходимо:
CREATE UNIQUE INDEX i1 ON table(num)
Если у вас нет индекса, БД будет непрерывно сканировать все строки таблицы, а это не то, что вам нужно.
И, да, 111 222 333 - это числа, полученные от клиентов, для которых вы проверяете.
Допустим, в вашей базе данных были номера 1,2,3,4,5,6, а список клиентов - 1,5,7. Когда вы выполните команду SELECT num FROM WHERE num IN (1,5,7), вы получите 2 строки: 1 и 5.
Итак, вам нужно сравнить число результата, 1,5 с вашим списком, 1,5,7. Я не знаю достаточно Python, а тем более Django, чтобы дать вам хороший пример, но быстрый взгляд показывает, что у них есть «установленные» объекты. С этим вы могли бы сделать:
newSet = clientSet.difference(dbSet)
где clientSet - набор чисел от клиента, dbSet - набор чисел из данного запроса, а newSet - список номеров, которые есть у клиента, которых нет в базе данных.
Возможно, я неправильно использовал оператор разности, но в этом суть.