• MongoDB выбрать из вложенного массива?

    Tark
    @Tark
    beduin01, ХЗ, из NoSQL я работал только с MongoDB. Но не всё ли равно? Вы нашли нужный документ, теперь вам нужно лишь пройтись по массиву и вытащить нужные данные.
  • MongoDB выбрать из вложенного массива?

    Tark
    @Tark
    beduin01, MongoDB оперирует документами. Не частью данных этих документов, а документом. Нельзя из списка документов достать только какое-то значение. Вам вернёт документ, как в вашем примере, а вы из него будете вытаскивать всё, что вам нужно.
  • MongoDB выбрать из вложенного массива?

    Tark
    @Tark
    beduin01, эээ... Тут два варианта ответа) Если вам нужен не весь документ, а только tags, то вторым параметром обычно можно указать те элементы, которые нужны. db.qtest.find({'tags': {'$elemMatch': {'Python': 14}}, {'_id': 0, 'tags': 1}) - выведет документ, где будет только tags. А если вам нужно достать tags из полученного документа, то нужно смотреть на язык программирования, на котором вы всё это делаете. На Python с pymondo что-то типа result['tags'] вернёт содержимое этого элемента.
  • MongoDB выбрать из вложенного массива?

    Tark
    @Tark
    beduin01, это сработает, если 'tags': ['Python', 'PHP', 'Ruby']
  • MongoDB выбрать из вложенного массива?

    Tark
    @Tark
    А, извините. Ну вот так, с помощь dot notation. Только учтите, что нужно знать номер элемента, в котором искать. Либо, если вы не знаете номера элемента, то db.qtest.find({'tags': {'$elemMatch': {'Python': 14}}) Или, если элементы массива примитивных типов, такие как строки, то можно сделать просто {'tags': 'Python'}
  • Как несколько раз отправить в Request один и тот же адрес несколько раз в Scrapy?

    Tark
    @Tark
    Ох. Установил тучу всякой фигни, а потом узнал, что для работы scrapy нужен именно Python 2.7.
    Зато прочитал документацию и узнал, что...

    dont_filter (boolean) – indicates that this request should not be filtered by the scheduler. This is used when you want to perform an identical request multiple times, to ignore the duplicates filter. Use it with care, or you will get into crawling loops. Default to False.

    Так что попробуйте в Request добавить dont_filter=True
  • Как несколько раз отправить в Request один и тот же адрес несколько раз в Scrapy?

    Tark
    @Tark
    У меня Python 3.4.3, требуется MS VC++ 2010 для установки scrapy. Сейчас поставлю и проверю...
  • Как несколько раз отправить в Request один и тот же адрес несколько раз в Scrapy?

    Tark
    @Tark
    Двадцать раз был сделан запрос по одному и тому же адресу. И?

    В функции parse_item вы можете что-то сделать с полученной страницей (это response, обьект класса).
    Пожалуй, не стоило совать Request в список, я был неправ. Просто уберите return из вашего цикла, пусть будет что-то типа

    def parse(self):
        for data in years[1:8]:
            Request(link, formdata={'year': str(data)}, callback=self.parse_item)
    
    def parse_item(self, response):
        # здесь идёт работа с response. 
        print "%s has been parsed and we got: %s" % (response.url, response.body)
  • Как несколько раз отправить в Request один и тот же адрес несколько раз в Scrapy?

    Tark
    @Tark
    Список из... Request?

    В примере должно выполниться семь вызовов к link с помощью GET-запроса (по умолнчанию), и семь раз будет вызываться parse_year. Можно обратиться к response.body или response.url, чтобы посмотреть, что данные для вызова изменялись, что year каждый раз разный.

    Давайте так. "Как несколько раз отправить в Request один и тот же адрес несколько раз в Scrapy" - не использовать в цикле return. Какая разница, в однм файле или не в одном всё это работает?
  • Как несколько раз отправить в Request один и тот же адрес несколько раз в Scrapy?

    Tark
    @Tark
    Вы пробовали использовать приведённый пример?

    Конструкция return завершает выполнение функции и возвращает результат вне зависимости от того, где эта конструкция была вызвана. Вы вызываете её в цикле - цикл сразу же прекращается, функция parse возвращает результат запроса.

    Я написал пример функции, которая вернёт список с результатами семи вызовов. Не подходит?
  • Почему так происходит вместе с uwsgi?

    Tark
    @Tark
    Да, проблему решит. К сожалению, проблема будет в быстродействии: пока выполняется один запрос, все остальные будут ждать. Но если вы уверены, что нагрузка будет невысокой, а сервис работает достаточно быстро (вряд ли медленнее 15-20мс на запрос, правда же?), то всё будет в порядке.
  • Что можно сделать на Tornado?

    Tark
    @Tark Автор вопроса
    Спасибо :) Кажется, что вам просто нравится Tornado (исключая последний пример, когда действительно может пригодиться). Мне пришло в голову возможное применение торнадо для хранения и обработки состояний чего-нибудь типа игроков в онлайн-игре или, я не знаю, месторасположения таксистов и пассажиров для показа всего этого на сайте/приложении. Но стоит ли тогда целенаправленно изучать этот фреймворк или правда стоит перейти на третий питон и врубиться в asyncio/aiohttp?
  • Что можно сделать на Tornado?

    Tark
    @Tark Автор вопроса
    Спасибо! А можно ещё парочку примеров насчёт "вещей, когда просто нужен вебсервер и шаблоны"?..
  • Что можно сделать на Tornado?

    Tark
    @Tark Автор вопроса
    Спасибо! Похоже, пора плотно переходить на Python 3. Уж больно простым становится асинхронное программирование с aiohttp...
  • Что можно сделать на Tornado?

    Tark
    @Tark Автор вопроса
    Что на Tornado можно сделать что угодно, это понятно. Более того, почти на всём можно сделать почти всё. Используется, если нужно обработать большое количество HTTP-запросов? Но если посмотреть на (довольно старое и крайне сомнительное) сравнение, то торнадо ничем особенным не выделяется. И "длительная обработка запроса (например, по причине взаимодействия с сервером баз данных), сводит преимущества Торнадо на нет" (с) википедия.

    Тем не менее, в правой части этого сайта иногда пишут вакансии Python-программистов и там иногда требуется знание Tornado. Что же это? Неужели просто наследие? Или всё-таки есть какие-то задачи, где лучше всего подойдёт именно этот фреймворк?

    Вопрос-то состоит в том, для чего Tornado был написан помимо "фатального недостатка". Это не значит, что мне нечем себя занять и я прошу дать мне какую-то задачу, чтобы я познакомился с этим фреймворком - уж с этим-то я и сам справлюсь :)
  • Как выбрать язык ввода в Apache Cordova?

    Tark
    @Tark Автор вопроса
    Скопировал дефолтный стиль body из сгенерированного по умолчанию каркаса приложения Cordova, отменил галочку Hardware Keyboard в настройках Android - всё заработало даже в эмуляторе; товарищ тоже смог ввести русские буквы. Устройство у него нелокализованное, да, какая-то китайская фиговина заместо смартфона, с английским языком по умолчанию. Чуть позже вопрос удалю: решение пришло само собой.
  • Как добавить объект в базу?

    Tark
    @Tark
    Sergo Sergo, что-то типа

    var test = [
        {'1': {test: 1}},
        {'2': {test: 2}}
    ];

    не пойдёт? Что-то типа массива объектов.
  • Как отдать в шаблон найденые в базе данных обьекты?

    Tark
    @Tark
    О, посмотрев инфу по PonyORM, я узнал, что у моделей есть метод to_dict(), то есть можно даже не делать этот дурной костыль, а использовать вот так: return json.dumps([user.to_dict() for user in select_allvalid_users()]). Или и без json.dumps работает?
  • Как отдать в шаблон найденые в базе данных обьекты?

    Tark
    @Tark
    Ага, понял. А что если в классе модели описать метод
    def json(self):
        return { 
            'id': self.id,
            ...
        }


    ... и вернуть
    return [user.json() in select_allvalid_users()]
  • Как отдать в шаблон найденые в базе данных обьекты?

    Tark
    @Tark
    Постойте, но вы же говорите, что функция select_allvalid_users() возвращает список обьектов? То есть она работает нормально. Вот этот самый список и нужно передать. Прям сам список, без всяких действий над ним. Как там... render_template('template.html', users=usr), где usr = select_allvalid_users() . Так не пойдёт?