Змея / Говнокод #20125 Ссылка на оригинал

0

  1. 1
"SELECT * FROM tbl_entries WHERE date LIKE '%%%04d.%02d.%02d%%' " % (y, m, d)

Запостил: 3_dar 3_dar, (Updated )

Комментарии (44) RSS

  • О, это какие злобные мудаки держат в базе экранированные символы? Или это реально неэкраннированные символы, просто такой злой экран в запросе?
    Ответить
    • это напитон
      база тут не причем
      (а че, есть базы, в которых формат даты вот так вот фиксирован, а не управляется локалью инстанса, локалью сессии и фазой луны? снова mysql?)
      Ответить
      • Я не представляю. Даже MySQL управляется. Но такое выражение можно в почти любой базе написать, под текущую локаль.

        Да и вообще.

        Ну чо сразу Гитлер MySQL? Не ну серьёзно, нормальная БД.
        Ответить
      • Существует 100500 способов хранения даты в базе: и стандартные для базы форматы даты, и число (от эпохи Юникс/Р.Х./основания Рима), и даже тупо текстовая строка. Здесь больше похоже на последний вариант.
        Ответить
        • тупо текстовая строка - это какой-то пиздец, простите, коллега
          не надо так делать
          и байтов больше занимает, и не ищется, и не арифметизируется
          Ответить
          • как не ищется?? вот там же сверху пример приведен...

            ЗЫ даты и скл. у меня с этим делом только одна ассоциация - to_char(). first you ignore the to_char(). then you laugh at to_char(). then you fight with to_char(). then to_char() wins.
            Ответить
            • Для даты "2016.06.03T12:03:23.537Z". Я же хочу отчет за весь день, а не только за действия ровно в полночь!
              Перебирать по всем вариантам времени было слишком долго, так что оптимизировали как могли.
              Ответить
              • у тебя черно-белый монитор чтоли?
                мы тут все зеленым пишем

                зачем ты "2016.06.03T12:03:23.537Z" хранишь как строку?
                Ответить
                • Я однажды видел работающий терминал ЭВМ СМ (выпускались такие в странах СЭВ) с чёрно-зелёным монитором. Не представляю себе, как на них можно было работать, когда весь текст был зелёным.
                  Ответить
                  • когда с той стороны экрана на тебя глядит фортран, то зеленые не только буквы, но и небо и даже аллах
                    Ответить
                    • С картами такая фигня: истинно чёрно-белому монитору нужен только один видеоканал, а цветному как минимум три (у монитора EGA было шесть видеоканалов, потому что сигнал был двухуровневый, а не многоуровневый, в отличие от VGA). Так исторически получилось, что тому выводу в DB-разъёме, который использовал чёрно-белый монитор, в цветном соответствовал зелёный канал. Поэтому если в «Геркулес» воткнуть цветной монитор (типа CGA, MCGA, EGA), то он будет показывать зелёную картинку.
                      Ответить
                • Может, потому что 70% источников данных шлют строки в своих json'ах, а пойти и каждому отправляющему дать по голове у меня рук не хватает?
                  Кстати, далеко не все шлют "2016.06.03T12:03:23.537Z", некоторые раньше слали "2016-02-12T08:03:03Z" и долго ли у них продлится это, я не знаю.
                  Ответить
                  • обожемой!!

                    и ведь тогда придется решать задачу десериализации данных, приходящих в json! это немыслимо!

                    и вместо того, чтобы потратить процессорное время 1 раз за время жизни записи на этапе десериализации и вставки уже корректного типа в БД, ты желаешь тратить процессорное время тысячи раз, когда эта строка читается в бд таким образом

                    посмотри на богатство и разнообразие форматов ISO 8601, оба твоих варианта входят в перечень
                    почему я более чем уверен, что в напитоне это уже всё есть (разбор ISO 8601 строки)
                    Ответить
        • Есть ещё один охуенный способ в "WordPress". Две колонки: date и date_gmt, обе текстовые. Вторая - это же время в gmt.
          Ответить
          • анальность способа напрямую проистекает из анскильности пыхобыдла, умноженной на отсосность недосубд
            Ответить
    • > держат в базе экранированные символы

      Попробуем угадать, что тут происходит. Строка уж больно похожа на формат printf. Предположим, что тут как раз и происходит применение шаблона к аргументам (я не питонист, поправьте меня, если вру). Тогда %% — это тупо знак процента, %04d — это целое число, дополненное нулями до четырёх знаков, %02d — это целое число, дополненное нулями до двух знаков. Пусть y = 2016, m = 6, d = 3. Тогда строка развернётся в такую:
      "SELECT * FROM tbl_entries WHERE date LIKE '%2016.06.03%' "
      Знак % для оператора LIKE означает любой символ. Т. е. если в базе будет лежать 'kokoko2016.06.03kud-kudach', то условие будет соблюдено.

      Капитан Очевидность доклад закончил.
      Ответить
      • P.S. Замучена очепятка: % — это для LIKE любая последовательность символов, а не любой символ. Аналог .* в регулярках, короче.
        Ответить
    • >> держат в базе экранированные символы
      К сожалению, такие олигофрены встречаются очень часто. Не даром же тут ходит шутка про OHara
      Ответить
      • >> держат в базе экранированные символы
        Это как вообще? Вообще говнокодик что-то прокачался. Раньше тут бд старались не обсуждать лет 5 назад.
        Ответить
        • Очень просто.

          Одному PHPшнику рассказали про XSS. С тех пор он всегда делает ``htmlspecialchars`` для всех входящих данных, и пишет их в БД уже ввиде энититей. Зато при выводе он всегда может сделать <?=$data;?> и все будет безопасно.

          А потом его попросят вывести данные в PDF, вот тут-то и появится O&#29;Hara
          Ответить
  • пыховцы питон осваивают, видимо

    питонист бы юзал prep. statement и передавал туда date
    Ответить
  • - Сидим, пьём, а Артур Атарбекович в Лондоне важные переговоры ведёт. Если у него всё получиться, то для нас будет очень хорошо.
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8