gpt4 book ai didi

python - 在 python 中,根据函数变量更改 MySQL 查询

转载 作者:行者123 更新时间:2023-12-01 00:15:53 25 4
gpt4 key购买 nike

如果 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com