Эффективная вставка нескольких строк с помощью SQLAlchemy / SQLite3 при наличии дублирующихся записей - PullRequest
5 голосов
/ 21 апреля 2011

Я вставляю несколько строк в таблицу SQLite3 с помощью SQLAlchemy, и часто записи уже находятся в таблице. Вставить строки по одной очень медленно, перехватить исключение и продолжить, если строка уже существует. Есть ли эффективный способ сделать это? Если строка уже существует, я бы ничего не делал.

Ответы [ 2 ]

5 голосов
/ 21 апреля 2011

Вы можете использовать оператор SQL

INSERT OR IGNORE INTO ... etc. ...

, чтобы просто игнорировать вставку, если она дублируется.Узнайте о IGNORE конфликтном предложении здесь

Возможно, вы можете использовать OR IGNORE в качестве prefix в своей SQLAlchemy Insert - документация о том, как разместить OR IGNOREмежду INSERT и INTO в вашем выражении SQL здесь

1 голос
/ 21 апреля 2011

Если вы счастливы запустить «нативный» SQL SQL, вы можете просто сделать:общий sqlalchemy диалект.

Другая вещь, которую вы можете сделать, это использовать SQLAlchemy ORM, определить «модель предметной области» - класс python, который отображается в таблицу базы данных.Затем вы можете создать множество экземпляров вашего класса домена и вызывать session.save_or_update (domain_object) для каждого из элементов, которые вы хотите вставить (или игнорировать), и, наконец, вызвать session.commit (), когда вы хотите вставить (или игнорировать) элементык вашей таблице базы данных.

Этот вопрос выглядит как дубликат SQLAlchemy - ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ эквивалент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...