170 похожих чатов

Https://Dpaste.Org/8HXw0 Прошу обоссать меня всем желающим. Как можно улучшить этот код? Нужно ли

вообще? Структура сильно менятся не будет - бд по задумке разрастаться не будет. Некуда и незачем.

55 ответов

36 просмотров

обычно не стоит форматировать SQL через .format()/f-строки во избежание SQL-инъекций

целочисленные айдишники это прошлый век, бери ууиды/object id

Max Силинг
обычно не стоит форматировать SQL через .format()/...

Можно, если прогнать через протект метод переменную во время вставки или сразу

Tigran Saluev
нет, why?

ну, автоинкриментный целочисленный айди как-то привычнее. Uuid нужны в распределенных системах.

Alex
ну, автоинкриментный целочисленный айди как-то при...

привычнее-то он привычнее, но у него много минусов: — айдишники разных сущностей пересекаются, из-за этого много возможностей набаговать, в том числе написать некорректные тесты — можно извне следить за бизнес-показателями сервиса, следя за ростом айдишников

Tigran Saluev
привычнее-то он привычнее, но у него много минусов...

У Uuid минусов не меньше. Вопрос лишь в том, какие из минусов критичнее для конкретного проекта.

Tigran Saluev
можно список?

С телефона лень писать портянку, но вполне адекватных статей со сравнениями полон интернет.

Tigran Saluev
можно список?

Требуется их генерировать, коллизии, индекс тяжелее

Максим Мартынов
Даже если говорить про v7?

Размер, производительность, человекочитаемость

Tigran Saluev
привычнее-то он привычнее, но у него много минусов...

ну второе да. Это правда, но при условии что клиент видит твои айдишники. В случае например телеграм-бота он такую информацию не получит, если ты только сам не сообщишь. В заметной степени проблему можно решить использованием slug-ов. По поводу первого все-таки спорно. Современные подходы программной архитектуры позволяют достаточно абстрактно работать с сущностями даже полагаясь на чистый sql. Фактически если посмотреть монографии Мартина Фаулера и Эрика Эванса, то там паттерны часто показаны с использованием чистого sql которые авторы показывают как абстрагировать.

Максим Мартынов
Даже если говорить про v7?

У любых, в общем-то. Банально некоторые плюсы в другой ситуации становятся минусами и наоборот.

Ded
Требуется их генерировать, коллизии, индекс тяжеле...

генерировать — почему это проблема? весь код уже написан. коллизии это проблема на уровне коллизий в гите. никто никогда с коллизией не столкнётся. а производительность — это минорная проблема по сравнению с потенциальными багами и утечками, не так сильно она страдает, чтобы это рассматривать всерьёз (на масштабах, где нужно — всё равно система уже распределённая и по-другому никак)

Айван
Размер, производительность, человекочитаемость

ну человекочитаемость это как раз один из минусов

про монографии интересное замечание. кто читает монографии и пишет код по ним?) на деле в той же джанге в фильтре id взять не из той сущности — совершенно повседневный косяк, а в тесте не отловишь, потому что всех сущностей по одной и у них у всех id = 1.

Tigran Saluev
про монографии интересное замечание. кто читает мо...

Можно креативнее подходить к id в тестах. У нас иногда рандомизировались, например. Да и кроме id у сущностей есть куча других элементов. Как их спутать?

Tigran Saluev
генерировать — почему это проблема? весь код уже н...

Да я не против, сам их постоянно юзаю, удобно когда надо интегрировать разные сервисы у которых разные бд

evle
Можно креативнее подходить к id в тестах. У нас ин...

ну это надо про рандомизацию ещё вспомнить) другие элементы не надо путать чтобы набаговать. вот у тебя есть в коде lesson и course, и ты пишешь Student.objects.filter(group__course_id=lesson.id) и всё, у тебя баг

Tigran Saluev
ну это надо про рандомизацию ещё вспомнить) другие...

А тебе что помешает с тем же успехом один и тот же uuid в тесты подставлять? ;⁠-⁠)

Tigran Saluev
про монографии интересное замечание. кто читает мо...

Обидное замечание. Ну я стараюсь реализовывать то что прочитал. Вот то что человек выше запостил с просьбой "обоссать" это отчасти результат моих рекомендаций. Или вот еще сегодня было обсуждение https://t.me/ru_python/2068947. Много обсуждения современной программной архитектуры у нас проходит в @fastapi_ru. Де-факто это кружок обсуждения Чистой Архитектуры и DDD. Так что ну кто-то пишет по книжкам.

Tigran Saluev
ну это нудно

Ну а как ты будешь их иначе задавать, чтобы тот же подход был не применим к обычным автоинкрементным?

Alex
Обидное замечание. Ну я стараюсь реализовывать то ...

i meant no offence, конечно, есть люди, которые пишут по книжкам, но ты этого не можешь от всех ожидать. у тебя есть сложные меры защиты от багов (архитектура то-сё) и простые (использовать везде uuid вместо численных — можно даже линтером заэнфорсить), зачем отказываться от простых

evle
Ну а как ты будешь их иначе задавать, чтобы тот же...

ну вот когда у тебя uuid, они все неизбежно рандомизированные, так что думать не надо и забыть рандомизировать нельзя

Tigran Saluev
ну вот когда у тебя uuid, они все неизбежно рандом...

В тестах данные из каких-нибудь фикстур подгружаются обычно. Шут его знает, что туда накопипащено.

Tigran Saluev
привычнее-то он привычнее, но у него много минусов...

Ещё можно нечаянно сделать так, что можно перебрать ресурсы по порядку. На одном сайте недавно нашёл такое. Суть: можно заплатить небольшую сумму и смотреть подробную статистику по своей <штуке>. Но можно немного поменять ID в адресной строке, и увидишь статистику по чужой <штуке>, которую видеть вообще не следует

Tigran Saluev
про монографии интересное замечание. кто читает мо...

Девушка на днях как раз писала приложение на моках. И только благодаря ошибке в тесте поймали, что юзался не тот айди

Ax3🇺🇦- Автор вопроса
Max Силинг
обычно не стоит форматировать SQL через .format()/...

там же формирование бд только, для создания табличек. Да и исходники не всходящие данные, а список таплов, который ручками в коде прописывается. Разве туда можно вообще пихнуть иньекцию?

Ax3🇺🇦- Автор вопроса
Tigran Saluev
целочисленные айдишники это прошлый век, бери ууид...

звучит как троллинг. Если я пишу на скулайт - смогу ли я нормально заюзать UUID и не напортачить, тем более на "проде"

Ax3🇺🇦- Автор вопроса

так. Вроде крупных копняков не услышал. Можно юзать или сжечь во имя сатаны?

Ax3🇺🇦
так. Вроде крупных копняков не услышал. Можно юзат...

То есть то что оно трещит по швам на ровном месте - тебя не смущает?

Ax3🇺🇦- Автор вопроса
evle
То есть то что оно трещит по швам на ровном месте ...

где именно? Для этого и скинул ПыСы Представим, что ОРМ не существует. Не умею я в них.

Ax3🇺🇦
где именно? Для этого и скинул ПыСы Представим, ...

Отвечали же. Первая кавычка в данных - всё осыпалось.

Ax3🇺🇦
А как...

Красиво и с фейерверками. Нефиг так запросы собирать. Ну и структурно - треш какой-то.

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
А как...

а. А блять. Я-то думаю - хули не так. Всё, я понял. Почему-то не допер с самого начала, что это говнище, в строку валюэ вставлять.

Ax3🇺🇦- Автор вопроса
Tishka17
уууух

Да. Я только допер. Да.

Ax3🇺🇦
а. А блять. Я-то думаю - хули не так. Всё, я поня...

Ну, сама идея написать такой код близко к данным уже пугает.

Ax3🇺🇦
а. А блять. Я-то думаю - хули не так. Всё, я поня...

я бы предложил выкинуть кодогенерацию

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦- Автор вопроса

а как ещё можно решить проблему динамического поиска по параметрам? (когда не все параметры указываются) Разве не логично формировать скулайт запрос в зависимости от входящих параметров поиска?

Ax3🇺🇦
а как ещё можно решить проблему динамического поис...

where (column1 = parameter1 or parameter1 is unspecified) and (column2 = parameter2 or parameter2 is unspecified)`

Ax3🇺🇦- Автор вопроса
Denis Pobedrya
where (column1 = parameter1 or parameter1 is unspe...

Таааакс. Можно ссылку на доки? Я не понимаю что это. Хотя че туплю. Сам найду

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
is unspecified

is unspecified это псевдокот, в реальности будет is null или = 0 или cardinality(parameter) = 0 или т.д.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Oh sorry did you want it in Gunter's chains?
Martin Rys
15
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта