Форум сайта python.su
Добрый день!
Имеем сайт на джанго и БД. Нужно найти информацию по БД и вывести ее на сайт. Реализовал ее так. Насколько это грамотно в плане безопасности, т.к. везде написано склейка запроса не есть хорошо?
Может есть более эффективный способ? Заранее спасибо!
s = 'плиточный клей knauf or кнауф'
l = s.split()
print(s)
search = {}
if 'or' in l:
for i in range(len(l)):
if l[i] == 'or' or l[i] in search.values():
continue
elif i == len(l)-1:
print(i, len(l))
search[l[i]] = None
break
elif l[i+1] != 'or':
search[l[i]] = None
else:
search[l[i]] = l[i+2]
else:
for i in l:
search[i] = None
print(search)
s_l = "name LIKE '%"
s_or = ' OR '
s_and = ' AND '
itog = 'SELECT * from main WHERE '
for i, v in search.items():
if v == None:
itog += "(" + s_l + i + r"%'" + ")" + s_and
elif v != None:
itog += "(" + s_l + i + r"%'" + s_or + s_l + v + r"%'" + ")" + s_and
if itog[-1] == ')':
print(itog + ';')
else:
print(itog[:-5] + ';')
Отредактировано sharkk (Янв. 18, 2018 15:42:38)
Офлайн
sharkk
Вы занимаетесь глупостями. Джанго - это ОРМ, всё что вы делаете конкатенацией строк делается гораздо проще и надежнее через стандартные джанговские запросы.
Офлайн
FishHookПро глупости это и так понятно (Реализовано, как смог ). С джанго столкнулся впервые, по Вашим двум словам “Джанго и ОРМ” уже нашел парочку ссылок на хабре, читаю, спасибо!
Вы занимаетесь глупостями. Джанго - это ОРМ, всё что вы делаете конкатенацией строк делается гораздо проще и надежнее через стандартные джанговские запросы.
Отредактировано sharkk (Янв. 19, 2018 10:26:24)
Офлайн
sharkk
https://docs.djangoproject.com/en/2.0/intro/
Видели видеоролик где рабочий берет неподключенный отбойный молоток и мучаясь долбил им стену, вместо того что бы подключить его и спокойно сделать свою работу. Вот вы сейчас тем же занимаетесь.
Офлайн
В моем случае. Повторю, что запрос это простое текстовое поле вводимое пользователем из него и формирую запрос.
SELECT * from main WHERE (name LIKE ‘%клей%’) AND (name LIKE ‘%knauf%’ OR name LIKE ‘%кнауф%’) AND (name LIKE ‘%плиточный%’);
Пришли к такой же контантенации только на выходе избавились от кавычек вокруг %s.
cursor.execute("SELECT * FROM main WHERE (name LIKE %s) AND (name LIKE %s OR name LIKE %s) AND (name LIKE %s), (self.q))
Чую не все еще.
Помогите влючить этот отбойный молоток!
Отредактировано sharkk (Янв. 19, 2018 14:05:33)
Офлайн
sharkk
Пройдите туториал, вам никто не обязан давать бесплатные консультации только лишь потому, что вам лень читать учебники.
Офлайн
Вы совсем ничего не понял и это грустно
Офлайн
Пришел направить мысли в нужное русло, а посмотрел видеоролик с отбойным молотком.
Сделал по https://docs.djangoproject.com/en/2.0/topics/db/sql/, пока успокоился.
Отредактировано sharkk (Янв. 19, 2018 22:16:36)
Офлайн
Ну что тут скажешь? Тупо сковано - не наточишь, тупо рождено - не научишь.
Офлайн
А я думал, чемпионами не рождаются, ими становяться. Ну да ладно, Ваша жизненая позиция мне ясна
Офлайн