2011-04-14 84 views
1

我在django中製作了一個非常簡單的應用程序,其中有一個模型,當請求發出時,我基本過濾了來自該模型的對象,然後在模板中呈現它們。它似乎工作正常,但當我去檢查我的數據庫日誌。我發現Django在每個請求上連接兩次以檢索關於請求會話的信息。任何人都可以幫助我解釋爲什麼會發生這種情況?請參閱下面的示例日誌django連接兩次到數據庫

110414 18:28:29  8 Connect [email protected] on project1_dev 
      8 Query SET NAMES utf8 
      8 Query set autocommit=0 
      8 Query SELECT `django_session`.`session_key`, `django_session`.`session_data`, `django_session`.`expire_date` FROM `django_session` WHERE (`django_session`.`session_key` = '7af6952f847471091a83ee9382bb858d' AND `django_session`.`expire_date` > '2011-04-14 10:28:29') 
      8 Query SELECT `category_main`.`id`, `category_main`.`slug`, `category_main`.`is_active`, `category_main`.`site_id`, `django_site`.`id`, `django_site`.`domain`, `django_site`.`name` FROM `category_main` INNER JOIN `category_main_i18n` ON (`category_main`.`id` = `category_main_i18n`.`main_id`) INNER JOIN `django_site` ON (`category_main`.`site_id` = `django_site`.`id`) WHERE (`category_main_i18n`.`language` = 'en' AND `category_main`.`is_active` = 1) 
      8 Quit 
      9 Connect [email protected] on project1_dev 
      9 Query SET NAMES utf8 
      9 Query set autocommit=0 
      9 Query SELECT `django_session`.`session_key`, `django_session`.`session_data`, `django_session`.`expire_date` FROM `django_session` WHERE (`django_session`.`session_key` = '7af6952f847471091a83ee9382bb858d' AND `django_session`.`expire_date` > '2011-04-14 10:28:29') 
      9 Quit 

回答

0

您是否有機會使用django來爲您的媒體文件提供服務?這會創建額外的請求,從而產生額外的查詢。

「會話」查詢是在每個請求上完成的,這就是爲什麼我認爲您可能比您想象的要求更多。

+0

是的,我正在使用django來提供文件。但我做了一個快速的事情,我只是將調試模式設置爲false,因爲如果debug爲true,它有條件地包含url。我還刪除了所有服務於任何css或js的其他標記,並保留了一個簡單的for循環來打印查詢,並且仍然看到與上面相同的結果。它查詢數據庫兩次和奇怪的部分,它關閉連接並再次打開。 – 2011-04-14 16:08:07

+0

您可以嘗試使用django調試工具欄來跟蹤您的SQL請求,它可能會讓您有更多的智慧來解決這個問題。 – 2011-04-18 15:24:49

0

我經歷了完全相同的事情。在我的情況下,原來它是一個請求favicon的原因。它沒有顯示在Chrome網絡控制檯中,也沒有顯示在manage.py的訪問日誌中。我通過簡單地爲我的網站添加一個facicon.ico來解決它。

我也嘗試過調試工具欄,但是SQL查詢沒有出現在那裏,可能是因爲它們沒有與視圖關聯。