• Поиск модели по цене, если цена может быть указана в валюте?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    queryset = Flat.objects.filter(price__lte=200, price__gte=100).order_by('pub_date')
    Ответ написан
  • Как ускорить запрос c ifnull mysql?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Вычисляемое поле => сортировка всегда будет тормозить. отдельное поле может помочь только если вы делаете на нем индекс и выбираете в селекте поля из индекса.
    Вообще, select * - плохой путь, оптимизатор плачет.
    Ответ написан
  • Как узнать кодировку sql файла?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    смотря как выгружали, если mysqldump то в начале файла есть блок
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


    из него видно (SET NAMES utf8) что кодировка utf8
    Ответ написан
  • Как сделать множественный UPDATE?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    никак dev.mysql.com/doc/refman/5.6/en/insert-on-duplicat...
    и правильно предостерегают - ODKU чреват разными малопонятными аффектами, habrahabr.ru/post/156489 к примеру
    Ответ написан
    Комментировать
  • Две ORM модели для C# и Python. Нужно решение получше

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Я бы остановился на 2-м варианте. Сложность конечно в том, что если два разных VCS-репозитория то замучаетесь с синхронизацией веток... Парсеры JSON/XML/etc описаний модели - еще один контур отказа как минимум, как максимум - затратный по человекочасам на разработку/поддержку.
    Еще совет: подключите администрацию и "прогните" ту сторону :)
    Ответ написан
    Комментировать
  • Как импортировать одну модель в другую?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Я лечу циклические импорты выделением в отдельный модуль объектов, которые нужны "всем" и оттуда их портирую. Зачастую это можно сделать, но иногда приходится долго прыгать по файлам, выясняя кто кого когда портировал.

    Еще способ избегания циклов - портировать "по месту", например прямо в теле функции, юзающей библу. Минусы - импорты раскиданы по коду и сложно сделать рефактор при изменении модуля, который портируется. На производительность это не влияет (ну или минимально влияет), так как реальный импорт-парсинг происходит только при первом выполнении оператора import, а далее юзается .pyc файл.

    Кстати в Django можно юзать строку названия модели вместо самой модели, например:
    class GoalReach(MyAbstractModel, TestFactoryBoy):
        ....
        visit = ForeignKey('Visit', null=True, blank=True, related_name='goal_reached', on_delete=CASCADE)
       .....

    Visit - это модель из другого модуля, она записана как 'Visit' (в кавычках) при старте django её находит через installedapps
    Ответ написан
    Комментировать
  • Форматирование вывода в python в виде таблицы?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Если после спецификатора ‘:’ указать число — оно будет обозначать минимальную ширину поля, выраженную в количестве символов. Это удобно использовать для создания приятных для прочтения таблиц:

    >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
    >>> for name, phone in table.items():
    ...     print '{0:10} ==> {1:10d}'.format(name, phone)
    ...
    Jack       ==>       4098
    Dcab       ==>       7678
    Sjoerd     ==>       4127


    https://ru.wikibooks.org/wiki/Python/%D0%A3%D1%87%...
    более полно - https://docs.python.org/2/library/string.html#form...
    Ответ написан
    Комментировать
  • Почему интерпретатор Python не видит модуль?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    надо запускать в виде python -m script1 тогда срабатывает система поиска модулей пайтона по путям из sys.path

    C:\Users\username>C:\Python34\python.exe -h
    usage: C:\Python34\python.exe [option] ... [-c cmd | -m mod | file | -] [arg] ..

    если запускать как python script1.py то поиск будет осуществлятся через операционную систему, то есть в текущей директории.
    Переменная окружения Path используется для поиска _выполняемых_ файлов, python.exe в твоем случае.

    еще пожелание: для названий модулей и их расширения используйте только нижний регистр.
    Ответ написан
    1 комментарий
  • Celery: вложенный chord и события

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Только что сделал тест:
    import celery
    from celery.canvas import chord
    
    @celery.task
    def task_a(*args, **kwargs):
        logger.info('task_a')
        return 1
    
    @celery.task
    def task_b(*args, **kwargs):
        logger.info('task_b')
        return 1
    
    @celery.task
    def task_c(*args, **kwargs):
        logger.info('task_c')
        return 1
    
    @celery.task
    def task_d(*args, **kwargs):
        logger.info('task_d')
        return 1
    
    @celery.task
    def notify_a(*args, **kwargs):
        logger.info('notify_a')
        return 1
    
    @celery.task
    def notify_b(*args, **kwargs):
        logger.info('notify_b')
        return 1
    
    @celery.task
    def finish(*args, **kwargs):
        logger.info('finish')
        return 1
    
    
    def test_chord_chord():
        ch1 = chord([task_a.s(), task_b.s()], notify_a.s())
        ch2 = chord([task_c.s(), task_d.s()], notify_b.s())
    
        main_task = chord([ch1, ch2], finish.s())
        main_task.apply_async()

    все задачи выполнились.

    [2014-06-04 16:30:29,811: INFO/MainProcess] Got task from broker: celery.chord[36d088c0-648b-482e-9075-59e6aa1d519a]
    [2014-06-04 16:30:29,883: INFO/MainProcess] Task celery.chord[36d088c0-648b-482e-9075-59e6aa1d519a] succeeded in 0.0439801216125s: <GroupResult:...
    [2014-06-04 16:30:30,821: INFO/MainProcess] Got task from broker: celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] eta:[2014-06-04 16:30:30.845580+04:00]
    [2014-06-04 16:30:30,825: INFO/MainProcess] Got task from broker: celery.chord[41452081-7a54-4c8f-8328-a5861b9ceefc]
    [2014-06-04 16:30:30,828: INFO/MainProcess] Got task from broker: celery.chord[2a448074-02a1-4bb2-bf2a-9942b6157baa]
    [2014-06-04 16:30:30,875: INFO/MainProcess] Task celery.chord[2a448074-02a1-4bb2-bf2a-9942b6157baa] succeeded in 0.0350089073181s: <GroupResult:...
    [2014-06-04 16:30:30,876: INFO/MainProcess] Task celery.chord[41452081-7a54-4c8f-8328-a5861b9ceefc] succeeded in 0.0363390445709s: <GroupResult:...
    [2014-06-04 16:30:30,876: INFO/MainProcess] Task celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] retry: Retry in 1s
    [2014-06-04 16:30:31,834: INFO/MainProcess] Got task from broker: celery.chord_unlock[6ffd6da8-e2b0-405d-912f-55e2ce52b10b] eta:[2014-06-04 16:30:31.846696+04:00]
    [2014-06-04 16:30:31,837: INFO/MainProcess] Got task from broker: aggregator.tasks.task_c[1bc49e88-9348-441d-a5f2-776e35f3d178]
    [2014-06-04 16:30:31,840: INFO/MainProcess] Got task from broker: aggregator.tasks.task_d[7ce8e784-2eee-45bf-81c4-ecebe8343c76]
    [2014-06-04 16:30:31,843: INFO/MainProcess] Got task from broker: celery.chord_unlock[b6520638-e68e-4600-a306-9445ba54d7bd] eta:[2014-06-04 16:30:31.845846+04:00]
    [2014-06-04 16:30:31,846: INFO/MainProcess] Got task from broker: aggregator.tasks.task_a[f624d9df-a32e-40a7-beff-cbf49f414a2f]
    [2014-06-04 16:30:31,850: INFO/MainProcess] Got task from broker: aggregator.tasks.task_b[1979141c-2a9e-4dbb-a56f-848711c58afa]
    [2014-06-04 16:30:31,856: INFO/MainProcess] Got task from broker: celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] eta:[2014-06-04 16:30:31.857219+04:00]
    [2014-06-04 16:30:31,860: INFO/MainProcess] task_c
    [2014-06-04 16:30:31,860: INFO/MainProcess] task_a
    [2014-06-04 16:30:31,861: INFO/MainProcess] task_d
    [2014-06-04 16:30:31,863: INFO/MainProcess] Task aggregator.tasks.task_c[1bc49e88-9348-441d-a5f2-776e35f3d178] succeeded in 0.00339508056641s: 1
    [2014-06-04 16:30:31,865: INFO/MainProcess] task_b
    [2014-06-04 16:30:31,866: INFO/MainProcess] Task aggregator.tasks.task_a[f624d9df-a32e-40a7-beff-cbf49f414a2f] succeeded in 0.00567007064819s: 1
    [2014-06-04 16:30:31,867: INFO/MainProcess] Task aggregator.tasks.task_d[7ce8e784-2eee-45bf-81c4-ecebe8343c76] succeeded in 0.00664710998535s: 1
    [2014-06-04 16:30:31,868: INFO/MainProcess] Task aggregator.tasks.task_b[1979141c-2a9e-4dbb-a56f-848711c58afa] succeeded in 0.00276899337769s: 1
    [2014-06-04 16:30:31,870: INFO/MainProcess] Task celery.chord_unlock[6ffd6da8-e2b0-405d-912f-55e2ce52b10b] succeeded in 0.00752401351929s: None
    [2014-06-04 16:30:31,885: INFO/MainProcess] Task celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] retry: Retry in 1s
    [2014-06-04 16:30:31,890: INFO/MainProcess] Task celery.chord_unlock[b6520638-e68e-4600-a306-9445ba54d7bd] retry: Retry in 1s
    [2014-06-04 16:30:32,865: INFO/MainProcess] Got task from broker: aggregator.tasks.notify_b[c7ee5cde-934f-4838-b7ec-4b965deab3f8]
    [2014-06-04 16:30:32,869: INFO/MainProcess] Got task from broker: celery.chord_unlock[b6520638-e68e-4600-a306-9445ba54d7bd] eta:[2014-06-04 16:30:32.870193+04:00]
    [2014-06-04 16:30:32,871: INFO/MainProcess] notify_b
    [2014-06-04 16:30:32,873: INFO/MainProcess] Got task from broker: celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] eta:[2014-06-04 16:30:32.883596+04:00]
    [2014-06-04 16:30:32,874: INFO/MainProcess] Task aggregator.tasks.notify_b[c7ee5cde-934f-4838-b7ec-4b965deab3f8] succeeded in 0.00337815284729s: 1
    [2014-06-04 16:30:32,882: INFO/MainProcess] Task celery.chord_unlock[b6520638-e68e-4600-a306-9445ba54d7bd] succeeded in 0.00427103042603s: None
    [2014-06-04 16:30:32,893: INFO/MainProcess] Task celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] retry: Retry in 1s
    [2014-06-04 16:30:33,881: INFO/MainProcess] Got task from broker: celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] eta:[2014-06-04 16:30:33.888341+04:00]
    [2014-06-04 16:30:33,884: INFO/MainProcess] Got task from broker: aggregator.tasks.notify_a[5fb97e6c-5dc3-42a9-b52f-f6aaf228bfbc]
    [2014-06-04 16:30:33,888: INFO/MainProcess] notify_a
    [2014-06-04 16:30:33,890: INFO/MainProcess] Task aggregator.tasks.notify_a[5fb97e6c-5dc3-42a9-b52f-f6aaf228bfbc] succeeded in 0.00259184837341s: 1
    [2014-06-04 16:30:33,898: INFO/MainProcess] Task celery.chord_unlock[7deb4165-c2fb-4771-8c56-edf30912b4c3] succeeded in 0.00864100456238s: None
    [2014-06-04 16:30:34,890: INFO/MainProcess] Got task from broker: aggregator.tasks.finish[1042518e-bea4-49fb-a11c-37b5ffa29c1a]
    [2014-06-04 16:30:34,893: INFO/MainProcess] finish
    [2014-06-04 16:30:34,895: INFO/MainProcess] Task aggregator.tasks.finish[1042518e-bea4-49fb-a11c-37b5ffa29c1a] succeeded in 0.00239610671997s: 1

    requirements.txt:
    Django==1.5.5
    celery==3.0.19
    celery-with-mongodb==3.0
    django-celery==3.0.17
    kombu==2.5.10

    settings.py
    INSTALLED_APPS = (
            ...
            'djcelery',
            'celery',
            ...
    )
    BROKER_URL = MONGO_CONN_STR
    CELERY_RESULT_BACKEND = "mongodb"
    Ответ написан
    Комментировать