2011-04-14 71 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查询没有出现在那里,可能是因为它们没有与视图关联。