2007年09月19日 星期三 02:18
Django×ÜÊÇLazyLoadµÄ¡£¼ÇµÃDjangoµÄÎĵµÕâÑù½²¡£ ÏÖÔÚÓÐÕâÑùµÄÒ»¸öÇé¾°¡£ÎÒÒªÏÔʾһ¸öÆÀÂÛÁÐ±í£¬²¢ÇÒÐèÒªÆÀÂÛËùÊôµÄÎÄÕÂID×÷Ϊһ¸ö²ÎÊý¡£¿´´úÂ룺 ÔÚViewÀïÃ棬recent_comments = Comment.objects.filter (blog=blog).order_by('-comment_time')[:10] ÔÚTemplate£º {% for comment in recent_comments %}
2007年09月19日 星期三 04:12
ooohhh,Django的ORM没有这么智能拉,不过你这种情况可以用comment.comment_to_id就可以了, :) 在07-9-19,jeff jie <bbmyth在gmail.com> 写道: > > Django总是LazyLoad的。记得Django的文档这样讲。 > 现在有这样的一个情景。我要显示一个评论列表,并且需要评论所属的文章ID作为一个参数。看代码: > > 在View里面,recent_comments = Comment.objects.filter > (blog=blog).order_by('-comment_time')[:10] > 在Template: > {% for comment in recent_comments %} >> comment.id}}"> > > {{comment.title}} > > ({{comment.author_name}}) > {% endfor%} > 我个人认为,comment.comment_to.id > 这个表达式不会去再次查询数据库,我这里只需要用到Comment所属的Entry的ID。在Java的一个ORM框架,Hibernate里,如果使用了LazyLoad, > 那么只是引用实体的ID是不会触发再次查询数据库的,Java使用动态代理技术实现这点,那么Python实现起来应该再简单。 > 但是我想错了,我使用一些Sql跟踪的中间件发现,显示每一条Comment时都会去根据Comment_to_id去查询一次Entry的表。典型的1+N现象。这就很搞笑,每一次查询出来的数据里面,只有ID是我想要的,而ID正好是Django用来查询的条件,那就相当于没事找事干了。 > > > 后来我只好加上select_related来解决这个问题,不过用Select_related来解决这个问题我个人看来有点浪费资源。Django还不如智能点,检测一下如果是ID的话,根本不需要再跑到数据库查多一遍。 > 相信各位也有类似的需求,解决方法是什么呢?有什么更好的建议吗? > 更多的讨论和原文在这里 <http://www.fallever.com/blog/jeff/16/>: > -- > site:http://www.fallever.com > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -------------- 下一部分 -------------- 一个HTML附件被移除... URL: http://python.cn/pipermail/python-chinese/attachments/20070919/db29d94c/attachment.html
2007年09月19日 星期三 07:54
On 9/19/07, John fractal <johnfractal在gmail.com> wrote: > ooohhh,Django的ORM没有这么智能拉,不过你这种情况可以用comment.comment_to_id就可以了, :) > > 在07-9-19,jeff jie <bbmyth在gmail.com> 写道: > > > > Django总是LazyLoad的。记得Django的文档这样讲。 > > 现在有这样的一个情景。我要显示一个评论列表,并且需要评论所属的文章ID作为一个参数。看代码: > > > > 在View里面,recent_comments = > Comment.objects.filter(blog=blog).order_by('-comment_time')[:10] > > 在Template: > > {% for comment in recent_comments %} > >> href="/blog/{{blog.shortcut}}/{{comment.comment_to.id}}/#{{comment.id}}"> > > > > {{comment.title}} > > > > ({{comment.author_name}}) > > {% endfor%} > > > 我个人认为,comment.comment_to.id这个表达式不会去再次查询数据库,我这里只需要用到Comment所属的Entry的ID。在Java的一个ORM框架,Hibernate里,如果使用了LazyLoad, > > > 那么只是引用实体的ID是不会触发再次查询数据库的,Java使用动态代理技术实现这点,那么Python实现起来应该再简单。 > > > 但是我想错了,我使用一些Sql跟踪的中间件发现,显示每一条Comment时都会去根据Comment_to_id去查询一次Entry的表。典型的1+N现象。这就很搞笑,每一次查询出来的数据里面,只有ID是我想要的,而ID正好是Django用来查询的条件,那就相当于没事找事干了。 > > > 后来我只好加上select_related来解决这个问题,不过用Select_related来解决这个问题我个人看来有点浪费资源。Django还不如智能点,检测一下如果是ID的话,根本不需要再跑到数据库查多一遍。 目前django好象做不到,建议你提交一个ticket给django。如果你要限定select的字段可以使用values方法,不过得到的就是一个字典,而不是一个数据库记录的对象了。 -- I like python! UliPad < >: http://code.google.com/p/ulipad/ My Blog: http://www.donews.net/limodou
2007年09月19日 星期三 11:46
¹ØÁ¬²éѯ£¬¾ÍÓÃSQLÀ´Ð´¡£¡£¡£¡£ ´Ó×ÖµäÀï´¦ÀíϾÍÐÐÁË -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070919/c6f8cd56/attachment.html
2007年09月19日 星期三 12:05
Èç¹ûÒòΪÕâô¼òµ¥µÄÐèÒª¶¯ÊÖÖ±½ÓдSql¸Ð¾õÓеã¹ýÁË¡£ORMÒ»±ßЪ×ÅÈ¥ÁË¡£ ¿´¿´£¬¹âÊÇÒªÓùØÁª¶ÔÏóµÄID£¬ÀíÏëºÍ×ÔÈ»µÄÇé¿ö϶¼Ó¦¸Ã²»ÐèÒªÖظ´¼ÓÔØ°¡¡£ ÔÚ07-9-19£¬haur <hekun06在gmail.com> дµÀ£º > > ¹ØÁ¬²éѯ£¬¾ÍÓÃSQLÀ´Ð´¡£¡£¡£¡£ ´Ó×ÖµäÀï´¦ÀíϾÍÐÐÁË > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- site:http://www.fallever.com -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070919/d82f3893/attachment.htm
2007年09月19日 星期三 13:39
ÄÇÈç¹ûʹÓÃÁË»º´æÄØ£¿ Æð³õÎÒÒ²ÒÔΪÔÚÄ£°æÖÐʹÓÃobject.id²»»áÔÙÒý·¢²éѯÁË¡£ - - !! -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070919/9281f887/attachment-0001.html
2007年09月19日 星期三 13:48
john fractal˵µÄ°ì·¨²»ÊÇͦºÃÂð¡£ On 9/19/07, ·çÏò±ê <vaneoooo在gmail.com> wrote: > > ÄÇÈç¹ûʹÓÃÁË»º´æÄØ£¿ > > Æð³õÎÒÒ²ÒÔΪÔÚÄ£°æÖÐʹÓÃobject.id²»»áÔÙÒý·¢²éѯÁË¡£ - - !! > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070919/7aa76c84/attachment.htm
2007年09月19日 星期三 14:22
ÔçÉÏÊÔÁËJohn fractal˵µÄ°ì·¨¡£Ð§¹û¸úobject.idÊÇÒ»ÑùµÄ¡£ ÔÚ07-9-19£¬@@ <askfor在gmail.com> дµÀ£º > > john fractal˵µÄ°ì·¨²»ÊÇͦºÃÂð¡£ > > On 9/19/07, ·çÏò±ê <vaneoooo在gmail.com> wrote: > > > > ÄÇÈç¹ûʹÓÃÁË»º´æÄØ£¿ > > > > Æð³õÎÒÒ²ÒÔΪÔÚÄ£°æÖÐʹÓÃobject.id²»»áÔÙÒý·¢²éѯÁË¡£ - - !! > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- site:http://www.fallever.com -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070919/cad15448/attachment.htm
Zeuux © 2025
京ICP备05028076号