В базе данных postgresql:
class Persons(models.Model):
person_name = models.CharField(max_length=10, unique=True)
Файл persons.csv
содержит 1 миллион имен.
$cat persons.csv
Name-1
Name-2
...
Name-1000000
Я хочу:
- Создайте имена, которых еще нет
- Запросите базу данных и получите идентификатор для каждого имени, содержащегося в файле csv.
Мой подход:
Используйте команду
COPY
или django-postgres-copy, которое его реализует.Также воспользуйтесь преимуществами нового Postgresql-9.5+ функция upsert.
Теперь все имена в CSV-файле также находятся в базе данных.
Мне нужно получить их идентификаторы из базы данных либо в памяти, либо в другом CSV-файле эффективным способом:
Используйте объекты
Q
list_of_million_q = <iterate csv and append Qs> million_names = Names.objects.filter(list_of_million_q)
или
Используйте
__in
для фильтрации на основе списка имен:list_of_million_names = <iterate csv and append strings> million_names = Names.objects.filter( person_name__in=[list_of_million_names] )
или
?
Я не считаю, что какой-либо из вышеперечисленных подходов для получения идентификаторов эффективен.
Обновить
Существует третий вариант, похожий на этот пост, который должен быть отличным решением, сочетающим в себе все вышеперечисленное.