Python программно добавляет запятую в конце кортежа

0

Я строю запрос выбора и добавляю к нему элементы программно. Проблема в том, что мне нужен кортеж значений, чтобы иметь запятую. Как я могу это сделать?

def build_search_query(user_list, make, model, price_min, price_max):
    sql = """SELECT * FROM mycolumn WHERE user_id = %s, """   
    for i, d in enumerate(user_list):        
        if not i == 0: #skip first user because its already in sql
            next_user = "OR user_id = %s, "
            sql += next_user
    age_str = "AND age = %s, "
    height_str = "AND height = %s, "
    price_min_str = "AND price > %s, "
    price_max_str = "AND price < %s "
    sql += age_str
    sql += height_str
    sql += price_min_str
    sql += price_max_str
    tuple1 = tuple(user_list)    
    tuple2 = (age, height, price_min, price_max,)
    values = tuple1 + tuple2 #this is where I need the trailing comma
    return sql, values
  • 0
    Вы не можете сказать кортежу "эй, у тебя должна быть запятая, когда я печатаю тебя". Объект кортежа не знает логики, используемой для превращения его в строку. Возможно, вы сможете поиграть со строковым представлением в той точке кода, где вы конвертируете кортеж в строку, но то, как это можно сделать, зависит от того, как вы это делаете. процентное форматирование? str.format? струны? Это неясно, так как мы не знаем, как build_search_query или что происходит с возвращаемыми значениями.
  • 0
    В любом случае, каждая библиотека базы данных, которую стоит использовать, имеет свои собственные методы параматеризации, которые намного лучше предотвращают атаки с использованием SQL-инъекций, чем все, что могут написать обычные люди. Вы почти никогда не должны вставлять значения в запросы самостоятельно.
Показать ещё 1 комментарий
Теги:

2 ответа

0

Очень кратко, ты не можешь. Значение является внутренним представлением кортежа. Как таковой, он не имеет скобок и запятых: это просто удобство для чтения человеком.

По определению, кортеж не имеет запятой. Поскольку вы возвращаете значение, а не печатное изображение (строковое представление для вывода), я не совсем уверен, куда вас привести.

0

Я посмотрел на ваш код, и с выбором чего-либо в любом условии в SQL после первого условия не требуется только запятая AND как это

SELECT * FROM mycolumn WHERE user_id = %s

age_str = " AND age = {}".format(something)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню