Уведомления

Группа в Telegram: @pythonsu

#1 Март 29, 2021 16:56:37

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Транзакции в базе sqlite

Добрый вечер. Можно ли создавать транзакции внутри цикла?
Просто почему то в первый раз быстро выполнилось а дальше медленно выполняется.
Понятно что одно соединение к базе значит одна транзакция.
Но я хочу открывать транзакцию скажем в цикле и там же закрывать,а это значит сколько угодно можно транзакций создавать в одном соединении к базе.
То есть складываем инсерты после обычного запроса 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+ (Март 29, 2021 16:56:55)

Офлайн

#2 Март 29, 2021 17:00:44

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Транзакции в базе sqlite

Или может какой-то конфликт происходит? Обычный запрос без транзакции к текущей базе относится и потом создаю транзакцию для этого же соединения к этой же базе. Как правильно выполнять запросы,чтобы можно было в перемешку выполнять запросы?

Офлайн

#3 Март 30, 2021 14:20:38

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Транзакции в базе sqlite

Скорее всего проблема была не в транзакции. А именно выборка после записи,так как данных становится больше после записи и базе sqlite нужно как то заново отсортировать прежде чем читать и отсюда медлительность походу. Думаю как можно обновить табличку после записи.

Офлайн

#4 Март 30, 2021 20:41:12

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2469
Репутация: +  173  -
Профиль   Отправить e-mail  

Транзакции в базе sqlite

> Понятно что одно соединение к базе значит одна транзакция.

Нет, соединение никак не связаны с транзакциями.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Март 31, 2021 09:37:19

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 64
Репутация: +  1  -
Профиль   Отправить e-mail  

Транзакции в базе sqlite

Вопрос решен. Тему можно закрыть. Был неправильно создан индекс,точнее дополнительный создал индекс и все пошло как по маслу.

Офлайн

#6 Май 14, 2021 13:20:33

Bonbrubon
Зарегистрирован: 2021-05-14
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Транзакции в базе sqlite

Хорошее решение )

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version