2010-03-04 5 views
0

1. У меня есть список данных и база данных sqlite, заполненные прошлыми данными, а также некоторые статистические данные по каждому из данных. Я должен выполнить следующие операции с ними.Нужна помощь по sqlite python?

  • Проверьте, есть ли каждый элемент в списке в БД. если нет, то собирайте некоторую статистику по новому элементу и добавляйте их в БД.
  • Проверьте, находится ли каждый элемент в БД в списке. если не удалить его из БД.

Я не могу просто создать новую БД, потому что у меня есть другая обработка, чтобы делать новые элементы и отсутствующие элементы.
Короче говоря, мне нужно обновить БД новыми данными в списке.
Что это лучший способ сделать это?

2. Мне пришлось использовать sqlite с потоками python. Поэтому я поместил блокировку для каждой операции чтения и записи БД. Теперь он замедляет доступ к БД.
Что такое накладные расходы на операцию блокировки резьбы? И есть ли другой способ использовать БД с несколькими потоками?
Может кто-нибудь помочь мне в этом? Я использую python3.1.

+0

Предположим, что в БД есть список файлов и их свойства. Я не хотел найти статистику для всех файлов для обновления только новых файлов. – asdfg

ответ

0
  1. Это не нужно проверить что-либо, просто использовать INSERT OR IGNORE в первом случае (просто убедитесь, что имеют соответствующие уникальные поля так ВСТАВИТЬ не будет создавать дубликаты) и DELETE FROM ТПС WHERE данных NOT IN ('первый item ',' second item ',' third item ') во втором случае.

  2. Как указано в официальном FAQ по SQLite, «Нити злы, избегайте их». Насколько я помню, всегда были проблемы с потоками + sqlite. Дело не в том, что sqlite не работает с потоками вообще, просто не полагайтесь на эту особенность. Вы также можете сделать один поток, работающий с базой данных, и сначала передать все запросы, но эффективность такого подхода сильно зависит от стиля использования базы данных в вашей программе.

+0

Я думал об использовании вставки или игнорирования, но мне нужно собрать некоторую статистику по новому элементу и добавить в БД. Я должен был упомянуть об этом. Я уточню вопрос. Thanx – asdfg

Смежные вопросы