Posts
web brains [/] About Trac login close Login with password Forgot password? Login with OpenID Archive for December, 2007 Просмотр SQL запросов, сделанных Django ORM 26 . 12 . 2007 10:20 | 3 comments | 0 pingbacks | debugging , django , orm , python , sql , templatetag Частая задача, которая встаёт при использовании Django в серьёзных проектах - знать, какие именно запросы генерирует Django ORM . Неподготовленного человека просмотр этих SQL запросов (вернее их количества) может привести в шок ) Например, если поле объекта является ForeignKey(null=True), то при выводе этого поля у множества объектов, на каждый объект будет делаться запрос для этого поля и даже select_related() не поможет. Подобные проблемы решаются различными ухищрениями типа: - http://web-brains.com/2007/12/06/selecte_related_and_foreign_key/ - http://piranha.org.ua/blog/2007/10/31/related-objects/ Но рассказать я хочу не про ухищрения, о которых и так уже рассказано, а о том, как можно удобно просматривать SQL запросы для каждой конкретной страницы сайта, сделанного на Django. continue reading Настройка awstats, nginx и logrotate 22 . 12 . 2007 15:39 | 0 comments | 0 pingbacks | awstats , logrotate , nginx , статистика Я уже четыре раза раза устанавливал связку awstas & nginx & logrotate и у меня сложилось более-менее внятное понимание работы этой троицы, о чём бы я и хотел рассказать. В первую очередь статья предназначена тем людям, которые решат использовать awstats & nginx на своих VDS и dedicated серверах. continue reading Утечка памяти в Django ORM 19 . 12 . 2007 0:12 | 8 comments | 0 pingbacks | django , memoryleak , orm , python Предыстория. Напарсил полмиллиона записей и решил их скриптом (на базе моделей и ORM django) обработать. Но вот незадача - на 143 тысяче скрипт умирал от нехватки памяти. Стал я, значит, думать, кто виноват и что делать. Конечно, легче всего было свалить всё на django ORM . что я и сделал ) Найдя виноватого, я с чистой совестью пошёл читать всяческие документации и дискуссии в django developers на тему мемори ликов. Выяснил две вещи: - я неправильно понимал работу django ORM - memory leaks в django orm отсутствуют continue reading Деньги, деньги, дребеденьги. 13 . 12 . 2007 17:30 | 6 comments | 0 pingbacks | бабло , деньги Мне 24 года, живу на съёмной квартире. У меня нет машины, ноутбука и я не разу не выехал за пределы своей страны повидать мир. Да, конечно, смотреть на мир с точки зрения монетизации собственной жизни немного наивно и неуклюже. Но иногда так стоит делать ) Если я в 2008 году не заработаю бабла, предлагаю официально считать меня долбоёбом ) select_related() and ForeignKey(null=True) 06 . 12 . 2007 9:22 | 0 comments | 1 pingback | django , foreignkey , orm , python , select_related Есть такая штука в django - selecte_related. Если вы присовокупите её к какому-нить QuerySet, то она сделает вот что: начнёт сказать по полям ForeignKey объектов из QuerySet и подгружать объекты, если у тех есть ForeignKey, то у них тоже подгрузит что-нибудь и т.д. Глубину проникновения можно регулировать параметром depth. Но есть у этой штуки один недостаток: она не работает с ForeignKey, которые могут быть null. continue reading Чо ваще происходит? 05 . 12 . 2007 14:09 | 12 comments | 0 pingbacks | byteflow , django , python , блог Движок блога обновлён. Теперь он работает на http://trac.piranha.org.ua/ [trac.piranha.org.ua] Я решил присоединиться к разработке движка Александра Соловьёва. Все старые комментарии я удалил т.к. не хотелось возиться с отсеиванием спама и конвертацией их в новый формат. Если кто-то захочет использовать наш движок у себя на сайте, будем очень рады - нам нужны бетатестеры. Previous month Next month Last comments lorien » Просмотр SQL запросов в Django: часть2 Лунная соната » Просмотр SQL запросов в Django: часть2 Фадеев » Firefox3 && firebug Фадеев » Просмотр SQL запросов в Django: часть2 Константин » Просмотр SQL запросов в Django: часть2 Last posts Просмотр SQL запросов в Django: часть2 Firefox3 && firebug Плагины для веб приложения на django Розовый попятчсо Тестирование импорта сообщений Useful information Blog feed Comments feed Tags debugging backup select_related fastcgi decorator validation authentication script debug статистика блоги plugin shell экспорт middleware foreignkey nginx django python awstats memoryleak документация sape orm seo templatetag javascript newforms firefox rubyonrails форум бабло byteflow logrotate template backend деньги pagination sql punbb production firebug pybb блог mercurial oscon ajax Advertize webmaster: lorien debug sql count: 15, sql time: 0.231 time: 0.037 SELECT ` blog_post ` . ` id ` , ` blog_post ` . ` author_id ` , ` blog_post ` . ` name ` , ` blog_post ` . ` slug ` , ` blog_post ` . ` teaser ` , ` blog_post ` . ` text ` , ` blog_post ` . ` render_method ` , ` blog_post ` . ` html ` , ` blog_post ` . ` date ` , ` blog_post ` . ` is_draft ` , ` blog_post ` . ` is_featured ` , ` blog_post ` . ` enable_comments ` , ` blog_post ` . ` tags ` ,( SELECT COUNT ( * ) FROM comment_nodes , django_content_type WHERE comment_nodes . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND comment_nodes . object_id = blog_post . id AND comment_nodes . approved ) AS ` approved_comments_count ` , ( SELECT COUNT ( * ) FROM pingback , django_content_type WHERE pingback . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND pingback . object_id = blog_post . id ) AS ` pingback_count ` FROM ` blog_post ` WHERE ( ` blog_post ` . ` is_draft ` = False AND ` blog_post ` . ` date ` BETWEEN 2007 - 12 - 01 AND 2008 - 01 - 01 ) ORDER BY ` blog_post ` . ` date ` DESC time: 0.033 SELECT ` tag ` . ` id ` , ` tag ` . ` name ` , ` tag ` . ` translation ` FROM ` tag ` INNER JOIN ` tagged_item ` AS ` tag__items ` ON ` tag ` . ` id ` = ` tag__items ` . ` tag_id ` WHERE ( ` tag__items ` . ` content_type_id ` = 12 AND ` tag__items ` . ` object_id ` = 22 ) ORDER BY ` tag ` . ` name ` ASC time: 0.002 SELECT ` tag ` . ` id ` , ` tag ` . ` name ` , ` tag ` . ` translation ` FROM ` tag ` INNER JOIN ` tagged_item ` AS ` tag__items ` ON ` tag ` . ` id ` = ` tag__items ` . ` tag_id ` WHERE ( ` tag__items ` . ` content_type_id ` = 12 AND ` tag__items ` . ` object_id ` = 21 ) ORDER BY ` tag ` . ` name ` ASC time: 0.001 SELECT ` tag ` . ` id ` , ` tag ` . ` name ` , ` tag ` . ` translation ` FROM ` tag ` INNER JOIN ` tagged_item ` AS ` tag__items ` ON ` tag ` . ` id ` = ` tag__items ` . ` tag_id ` WHERE ( ` tag__items ` . ` content_type_id ` = 12 AND ` tag__items ` . ` object_id ` = 20 ) ORDER BY ` tag ` . ` name ` ASC time: 0.002 SELECT ` tag ` . ` id ` , ` tag ` . ` name ` , ` tag ` . ` translation ` FROM ` tag ` INNER JOIN ` tagged_item ` AS ` tag__items ` ON ` tag ` . ` id ` = ` tag__items ` . ` tag_id ` WHERE ( ` tag__items ` . ` content_type_id ` = 12 AND ` tag__items ` . ` object_id ` = 19 ) ORDER BY ` tag ` . ` name ` ASC time: 0.009 SELECT ` tag ` . ` id ` , ` tag ` . ` name ` , ` tag ` . ` translation ` FROM ` tag ` INNER JOIN ` tagged_item ` AS ` tag__items ` ON ` tag ` . ` id ` = ` tag__items ` . ` tag_id ` WHERE ( ` tag__items ` . ` content_type_id ` = 12 AND ` tag__items ` . ` object_id ` = 18 ) ORDER BY ` tag ` . ` name ` ASC time: 0.021 SELECT ` tag ` . ` id ` , ` tag ` . ` name ` , ` tag ` . ` translation ` FROM ` tag ` INNER JOIN ` tagged_item ` AS ` tag__items ` ON ` tag ` . ` id ` = ` tag__items ` . ` tag_id ` WHERE ( ` tag__items ` . ` content_type_id ` = 12 AND ` tag__items ` . ` object_id ` = 16 ) ORDER BY ` tag ` . ` name ` ASC time: 0.110 SELECT ` comment_nodes ` . ` id ` , ` comment_nodes ` . ` user_id ` , ` comment_nodes ` . ` pub_date ` , ` comment_nodes ` . ` body ` , ` comment_nodes ` . ` body_html ` , ` comment_nodes ` . ` reply_to_id ` , ` comment_nodes ` . ` approved ` , ` comment_nodes ` . ` content_type_id ` , ` comment_nodes ` . ` object_id ` , ` comment_nodes ` . ` lft ` , ` comment_nodes ` . ` rght ` , ` auth_user ` . ` id ` , ` auth_user ` . ` username ` , ` auth_user ` . ` first_name ` , ` auth_user ` . ` last_name ` , ` auth_user ` . ` email ` , ` auth_user ` . ` password ` , ` auth_user ` . ` is_staff ` , ` auth_user ` . ` is_active ` , ` auth_user ` . ` is_superuser ` , ` auth_user ` . ` last_login ` , ` auth_user ` . ` date_joined ` , ` auth_user ` . ` site ` , ` auth_user ` . ` email_new ` , ` django_content_type ` . ` id ` , ` django_content_type ` . ` name ` , ` django_content_type ` . ` app_label ` , ` django_content_type ` . ` model ` FROM ` comment_nodes ` , ` auth_user ` , ` django_content_type ` WHERE ( ` comment_nodes ` . ` approved ` = True ) AND ` comment_nodes ` . ` user_id ` = ` auth_user ` . ` id ` AND ` comment_nodes ` . ` content_type_id ` = ` django_content_type ` . ` id ` ORDER BY ` comment_nodes ` . ` pub_date ` DESC LIMIT 5 time: 0.002 SELECT ` blog_post ` . ` id ` , ` blog_post ` . ` author_id ` , ` blog_post ` . ` name ` , ` blog_post ` . ` slug ` , ` blog_post ` . ` teaser ` , ` blog_post ` . ` text ` , ` blog_post ` . ` render_method ` , ` blog_post ` . ` html ` , ` blog_post ` . ` date ` , ` blog_post ` . ` is_draft ` , ` blog_post ` . ` is_featured ` , ` blog_post ` . ` enable_comments ` , ` blog_post ` . ` tags ` ,( SELECT COUNT ( * ) FROM comment_nodes , django_content_type WHERE comment_nodes . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND comment_nodes . object_id = blog_post . id AND comment_nodes . approved ) AS ` approved_comments_count ` , ( SELECT COUNT ( * ) FROM pingback , django_content_type WHERE pingback . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND pingback . object_id = blog_post . id ) AS ` pingback_count ` FROM ` blog_post ` WHERE ( ` blog_post ` . ` id ` = 28 ) time: 0.002 SELECT ` blog_post ` . ` id ` , ` blog_post ` . ` author_id ` , ` blog_post ` . ` name ` , ` blog_post ` . ` slug ` , ` blog_post ` . ` teaser ` , ` blog_post ` . ` text ` , ` blog_post ` . ` render_method ` , ` blog_post ` . ` html ` , ` blog_post ` . ` date ` , ` blog_post ` . ` is_draft ` , ` blog_post ` . ` is_featured ` , ` blog_post ` . ` enable_comments ` , ` blog_post ` . ` tags ` ,( SELECT COUNT ( * ) FROM comment_nodes , django_content_type WHERE comment_nodes . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND comment_nodes . object_id = blog_post . id AND comment_nodes . approved ) AS ` approved_comments_count ` , ( SELECT COUNT ( * ) FROM pingback , django_content_type WHERE pingback . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND pingback . object_id = blog_post . id ) AS ` pingback_count ` FROM ` blog_post ` WHERE ( ` blog_post ` . ` id ` = 28 ) time: 0.002 SELECT ` blog_post ` . ` id ` , ` blog_post ` . ` author_id ` , ` blog_post ` . ` name ` , ` blog_post ` . ` slug ` , ` blog_post ` . ` teaser ` , ` blog_post ` . ` text ` , ` blog_post ` . ` render_method ` , ` blog_post ` . ` html ` , ` blog_post ` . ` date ` , ` blog_post ` . ` is_draft ` , ` blog_post ` . ` is_featured ` , ` blog_post ` . ` enable_comments ` , ` blog_post ` . ` tags ` ,( SELECT COUNT ( * ) FROM comment_nodes , django_content_type WHERE comment_nodes . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND comment_nodes . object_id = blog_post . id AND comment_nodes . approved ) AS ` approved_comments_count ` , ( SELECT COUNT ( * ) FROM pingback , django_content_type WHERE pingback . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND pingback . object_id = blog_post . id ) AS ` pingback_count ` FROM ` blog_post ` WHERE ( ` blog_post ` . ` id ` = 27 ) time: 0.001 SELECT ` blog_post ` . ` id ` , ` blog_post ` . ` author_id ` , ` blog_post ` . ` name ` , ` blog_post ` . ` slug ` , ` blog_post ` . ` teaser ` , ` blog_post ` . ` text ` , ` blog_post ` . ` render_method ` , ` blog_post ` . ` html ` , ` blog_post ` . ` date ` , ` blog_post ` . ` is_draft ` , ` blog_post ` . ` is_featured ` , ` blog_post ` . ` enable_comments ` , ` blog_post ` . ` tags ` ,( SELECT COUNT ( * ) FROM comment_nodes , django_content_type WHERE comment_nodes . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND comment_nodes . object_id = blog_post . id AND comment_nodes . approved ) AS ` approved_comments_count ` , ( SELECT COUNT ( * ) FROM pingback , django_content_type WHERE pingback . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND pingback . object_id = blog_post . id ) AS ` pingback_count ` FROM ` blog_post ` WHERE ( ` blog_post ` . ` id ` = 28 ) time: 0.002 SELECT ` blog_post ` . ` id ` , ` blog_post ` . ` author_id ` , ` blog_post ` . ` name ` , ` blog_post ` . ` slug ` , ` blog_post ` . ` teaser ` , ` blog_post ` . ` text ` , ` blog_post ` . ` render_method ` , ` blog_post ` . ` html ` , ` blog_post ` . ` date ` , ` blog_post ` . ` is_draft ` , ` blog_post ` . ` is_featured ` , ` blog_post ` . ` enable_comments ` , ` blog_post ` . ` tags ` ,( SELECT COUNT ( * ) FROM comment_nodes , django_content_type WHERE comment_nodes . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND comment_nodes . object_id = blog_post . id AND comment_nodes . approved ) AS ` approved_comments_count ` , ( SELECT COUNT ( * ) FROM pingback , django_content_type WHERE pingback . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND pingback . object_id = blog_post . id ) AS ` pingback_count ` FROM ` blog_post ` WHERE ( ` blog_post ` . ` id ` = 28 ) time: 0.004 SELECT ` blog_post ` . ` id ` , ` blog_post ` . ` author_id ` , ` blog_post ` . ` name ` , ` blog_post ` . ` slug ` , ` blog_post ` . ` teaser ` , ` blog_post ` . ` text ` , ` blog_post ` . ` render_method ` , ` blog_post ` . ` html ` , ` blog_post ` . ` date ` , ` blog_post ` . ` is_draft ` , ` blog_post ` . ` is_featured ` , ` blog_post ` . ` enable_comments ` , ` blog_post ` . ` tags ` ,( SELECT COUNT ( * ) FROM comment_nodes , django_content_type WHERE comment_nodes . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND comment_nodes . object_id = blog_post . id AND comment_nodes . approved ) AS ` approved_comments_count ` , ( SELECT COUNT ( * ) FROM pingback , django_content_type WHERE pingback . content_type_id = django_content_type . id AND django_content_type . model = 'post' AND pingback . object_id = blog_post . id ) AS ` pingback_count ` FROM ` blog_post ` WHERE ( ` blog_post ` . ` is_draft ` = False ) ORDER BY ` blog_post ` . ` date ` DESC LIMIT 5 time: 0.003 SELECT DISTINCT ` tag ` . id , ` tag ` . name , COUNT ( ` blog_post ` . ` id ` ) FROM ` tag ` INNER JOIN ` tagged_item ` ON ` tag ` . id = ` tagged_item ` . tag_id INNER JOIN ` blog_post ` ON ` tagged_item ` . object_id = ` blog_post ` . ` id ` WHERE ` tagged_item ` . content_type_id = 12 GROUP BY ` tag ` . id , ` tag ` . name ORDER BY ` tag ` . name ASC