2015-06-17 3 views
0

Я оптимизировать свой код, который делает слишком много запросов на стартеСтранно Джанго «» BEGIN»- PARAMS =()» запрос

Я получаю почти до минимума сейчас, и начал. встретив следующее:

QUERY = 'BEGIN' - PARAMS =() 

Это, кажется, используется почти каждый раз, и практически удваивает количество запросов сделал - но я не думаю, что это на самом деле делать что-нибудь (кроме открывает подключение к DB и тратить время и процессор).

Может кто-нибудь сказать мне, что это такое, почему это необходимо, и если это не так, как я могу его удалить?

Я просматриваю свои запросы, используя django.db.connection.queries.

Django - 1.8 Python - 3.4 с sqlite как DB.

EDIT:

Предоставление примеров контекста немного странным, так как это почти каждый поступок я беру что требует запросов приводит этот запрос на всплывающие окна (наряду с запросом я хочу).

Но вот несколько примеров:

Создание объекта, который имеет метку времени по умолчанию в настоящее время:

session = Session() 
session.save() 

Предоставляет следующие запросы:

QUERY = 'BEGIN' - PARAMS =() 
QUERY = 'INSERT INTO "tracker_session" ("name", "session_date", "number_of_courts", "finished", "session_tracker") VALUES (%s, %s, %s, %s, %s)' - PARAMS = ('', '2015-06-17', 4, False, '') 

Аналогично обновляя группу объекты для изменения определенного атрибута:

()здесь только объект с атрибутом ManyToMany - players)

self.players.all().update(available=True) 

выходы:

QUERY = 'BEGIN' - PARAMS =() 
QUERY = 'UPDATE "tracker_person" SET "available" = %s WHERE "tracker_person"."id" IN (SELECT U0."id" AS Col1 FROM "tracker_person" U0 INNER JOIN "tracker_session_players" U1 ON (U0."id" = U1."person_id") WHERE U1."session_id" = %s)' - PARAMS = (True, 19) 

второй запрос всегда то, что я хочу, я понятия не имею, что первые QUERY = 'BEGIN' - PARAMS =() для.

+0

Без контекста почти невозможно сказать что-то об этом утверждении. –

+0

@KlausD. Добавлены некоторые примеры, которые помогут в контексте, сообщите мне, если вам нужно что-то еще. – Scironic

ответ

1

Я считаю, что запросы BEGIN - это работа в бэкэнде sqlite для работы с quirks sqlite. Я думаю, вы увидите один BEGIN для каждой записи, которую вы делаете вне транзакции.

Если вы хотите вникнуть в код дальше, запустите here.

Так что вы ничего не можете сделать с запросами, но я не стал бы волноваться, я сомневаюсь, что они окажут какое-то заметное влияние на производительность. Если вас действительно беспокоит производительность db записи, вы можете попробовать другой бэкэнд базы данных.

+0

Спасибо, глядя на код, кажется, вы правы. Вероятно, я скоро перейду на новый бэкэнд. – Scironic

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