2015-06-17 90 views
0

我優化我的代碼,這是在開始做太多的疑問奇怪的Django的'BEGIN」 - PARAMS =()」查詢

我得到幾乎最低限度,現在,已經開始。遇到下列未來:

QUERY = 'BEGIN' - PARAMS =() 

這似乎是用來幾乎每一次,實際上加倍的查詢號碼的 - 但我不認爲它實際上是做任何事情(除了開放的連接DB和浪費時間和CPU)。

誰能告訴我它是什麼,爲什麼這是必要的,如果不是,我該如何刪除它?

我在查看我的查詢使用django.db.connection.queries

Django - 1.8 Python - 3.4 以sqlite作爲數據庫。

編輯:上下文

提供的例子是有點古怪,因爲它幾乎每一個動作我拿這需要查詢導致此查詢彈出(旁邊我想查詢)。

但這裏有幾個例子:

創建其中有現在一個缺省時間戳的對象:

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, '') 

同樣更新一組改變特定屬性的對象:

(該self這裏只是一個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後端處理sqlite的怪癖。我想你會看到一個BEGIN,用於你在交易之外完成的每一個寫作。

如果您想進一步深入代碼,請啓動here

因此,您無法對查詢做任何事情,但我不擔心,我懷疑它們對性能有任何顯着影響。如果你真的擔心db的寫入性能,那麼你可以嘗試一個不同的數據庫後端。

+0

謝謝,看着你的代碼看起來你是對的。我很快可能會遷移到新的後端。 – Scironic