def get(id, user_id=None):
query = """SELECT *
FROM USERS
WHERE text LIKE %s AND
id = %s
"""
values = [search_text, id]
if user_id is not None:
query += ' AND user_id = %s'
values.append(user_id)
results = DB.get(query, values)
Как видите, основным отличием вашего исходного кода является небольшой блок if
в середине, который обогащает строку запроса и значения при необходимости. Я также сделал values
списком, а не кортежем, чтобы его можно было дополнить более естественным append
, а не
values += (user_id,)
, что, возможно, менее читабельно - однако, вы можете использовать его, если хотите сохранить values
кортеж по некоторым другим причинам.
edit : OP теперь поясняет в комментарии (!), Что его исходный запрос имеет конечное предложение LIMIT
. В этом случае я бы предложил другой подход, например:
query_pieces = ["""SELECT *
FROM USERS
WHERE text LIKE %s AND
id = %s
""", "LIMIT 5"]
values = [search_text, id]
if user_id is not None:
query_pieces.insert(1, ' AND user_id = %s')
values.append(user_id)
query = ' '.join(query_pieces)
results = DB.get(query, values)
Вы можете сделать это другими способами, но ведение списка частей запроса в правильном порядке, обогащение его по ходу (например, с помощью insert
) и объединение его с некоторыми пробелами в конце - довольно общий и удобный подход.