如果 user_id != None ...,我希望能够向查询添加限制...例如:
"AND user_id = 5"
但我不确定如何将它添加到下面的函数中?
谢谢。
def get(id, user_id=None):
query = """SELECT *
FROM USERS
WHERE text LIKE %s AND
id = %s
"""
values = (search_text, id)
results = DB.get(query, values)
这样我就可以调用:
get(5)
get(5,103524234) (contains user_id restriction)
最佳答案
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
block ,它可以根据需要丰富查询字符串和值。我还制作了 values
列表,而不是元组,因此可以使用更自然的 append
而不是
values += (user_id,)
可以说它的可读性较差 - 但是,如果您出于某些其他原因想要将 values
保留为元组,则可以使用它。
编辑: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
),并在末尾加入一些空格, 是一种非常通用且可用的方法。
关于python - 在 python 中,根据函数变量更改 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2800085/