在python中,基于函数变量更改MySQL查询

在python中,基于函数变量更改MySQL查询,python,mysql,function,Python,Mysql,Function,如果用户_id!=没有一个例如: "AND user_id = 5" 但我不知道如何将其添加到下面的函数中 多谢各位 def get(id, user_id=None): query = """SELECT * FROM USERS WHERE text LIKE %s AND id = %s """ values = (search_text, i

如果用户_id!=没有一个例如:

"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)

您可以使用条件列表构建SQL查询:

def get(id, user_id=None):
    query = """SELECT *
               FROM USERS
               WHERE 
            """
    values = [search_text, id]
    conditions=[
        'text LIKE %s',
        'id = %s']
    if user_id is not None:
        conditions.append('user_id = %s')
        values.append(user_id)
    query+=' AND '.join(conditions)+' LIMIT 1'
    results = DB.get(query, values)

如你所见,你的原始代码的主要区别是小<代码>中间的块,如果需要的话丰富查询字符串和值。我还制作了

values
列表,而不是元组,因此可以使用更自然的
append
而不是

         values += (user_id,)
可以说,它的可读性较差——但是,如果出于某些其他原因希望保留
元组,则可以使用它

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
),并在末尾添加一些空格,这是一种非常通用和可用的方法。

类似于:

def get(id, user_id=None):
    query = "SELECT * FROM USERS WHERE text LIKE %s"
    if user_id != None:
        query = query + " AND id = %s"%(user_id)
    :
    :

这种语法可能并不完美,我已经有一段时间没有使用Python了——我只是想让大家了解基本的想法。这默认为
None
情况,并且仅在您提供真实用户ID时添加额外的限制。

如果我在查询结束时有一个限制=5,并且我需要将其放在前面怎么办?@ensnare,那么您需要稍微不同的方法(并且您需要从一开始就更具体地提问;-)--让我编辑一下,展示一下。嘿,这真的很有帮助。非常感谢你。
def get(id, user_id=None):
    query = "SELECT * FROM USERS WHERE text LIKE %s"
    if user_id != None:
        query = query + " AND id = %s"%(user_id)
    :
    :