Найти - Пользователи
Полная версия: Транзакции в базе sqlite
Начало » Базы данных » Транзакции в базе sqlite
1
Ser5+
Добрый вечер. Можно ли создавать транзакции внутри цикла?
Просто почему то в первый раз быстро выполнилось а дальше медленно выполняется.
Понятно что одно соединение к базе значит одна транзакция.
Но я хочу открывать транзакцию скажем в цикле и там же закрывать,а это значит сколько угодно можно транзакций создавать в одном соединении к базе.
То есть складываем инсерты после обычного запроса select.
и потом условие если собрали в счетчике 10к инсертов:
то открываем транзакцию и выполняем все инсерты, коммитим и потом снова складываем 10к инсертов и снова входим в цикл для создания транзакции и выполнения.

 #несколько раз выполняем транзакцию.В первый раз отработало в 2-3сек а второй в 1мин #странно.Количество инсертов одинаковое ведь.
#до транзакции еще обычный запрос 
q2 = QtSql.QSqlQuery( SOED2 ) 
q2.exec("select бла бла бла ")
...
if (len(sp) != 0 and i==10000) or (len(sp) != 0 and q1.isValid() == False):
                    
    SOED2.transaction()
    q2 = QtSql.QSqlQuery( SOED2 )                   
    q2.exec("PRAGMA synchronous = OFF")
    q2.exec("PRAGMA journal_mode = OFF")
    for w in range(0,len(sp)):                        
           q2.exec(sp[w])
           continue                    
    SOED2.commit()
    i = 0
Ser5+
Или может какой-то конфликт происходит? Обычный запрос без транзакции к текущей базе относится и потом создаю транзакцию для этого же соединения к этой же базе. Как правильно выполнять запросы,чтобы можно было в перемешку выполнять запросы?
Ser5+
Скорее всего проблема была не в транзакции. А именно выборка после записи,так как данных становится больше после записи и базе sqlite нужно как то заново отсортировать прежде чем читать и отсюда медлительность походу. Думаю как можно обновить табличку после записи.
Rodegast
> Понятно что одно соединение к базе значит одна транзакция.

Нет, соединение никак не связаны с транзакциями.
Ser5+
Вопрос решен. Тему можно закрыть. Был неправильно создан индекс,точнее дополнительный создал индекс и все пошло как по маслу.
Bonbrubon
Хорошее решение )
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB