1. Python / Говнокод #20125

    −46

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

    Запостил: 3_dar, 02 Июня 2016

    Комментарии (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.
              Ответить
            • А для чего в данном примере используется LIKE?
              Ответить
              • Для даты "2016.06.03T12:03:23.537Z". Я же хочу отчет за весь день, а не только за действия ровно в полночь!
                Перебирать по всем вариантам времени было слишком долго, так что оптимизировали как могли.
                Ответить
                • у тебя черно-белый монитор чтоли?
                  мы тут все зеленым пишем

                  зачем ты "2016.06.03T12:03:23.537Z" хранишь как строку?
                  Ответить
                  • Я однажды видел работающий терминал ЭВМ СМ (выпускались такие в странах СЭВ) с чёрно-зелёным монитором. Не представляю себе, как на них можно было работать, когда весь текст был зелёным.
                    Ответить
                    • когда с той стороны экрана на тебя глядит фортран, то зеленые не только буквы, но и небо и даже аллах
                      Ответить
                    • Так делали некоторые монохромные карты (типа геркулеса).
                      Черно-зеленый экран это вообще круто, взять хотя бы калькуляторы Электроника

                      А вот в NetBSD консоль зеленая была одно время:
                      https://mail-index.netbsd.org/netbsd-users/2015/10/28/.attachments/jpg07WWRu7tt8.jpg
                      Ответить
                      • С картами такая фигня: истинно чёрно-белому монитору нужен только один видеоканал, а цветному как минимум три (у монитора 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 строки)
                      Ответить
          • показать все, что скрытоvanished
            Ответить
      • > держат в базе экранированные символы

        Попробуем угадать, что тут происходит. Строка уж больно похожа на формат 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
      Ответить
      • да хуй там
        в пхп тоже юзают prep. statements
        Ответить
        • в питоне prep. statements использовать не сложнее, чем форматные строки, а пыха предлагает отдельно сделать prepare, отдельно bind_param, отдельно задать значения параметров, и только после этого сделать execute
          Ответить
    • - Сидим, пьём, а Артур Атарбекович в Лондоне важные переговоры ведёт. Если у него всё получиться, то для нас будет очень хорошо.
      Ответить

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