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

标签 python mysql function

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

相关文章:

function - 正式调用的函数的第一行是什么?

python - EPD Python 和 MacPorts Python 可以在 OS X (matplotlib) 上共存吗?

php - codeigniter 中的 INNER JOIN ON 条件

python - TensorFlow 2.0 : Function with @tf. 函数装饰器不采用 numpy 函数

php - 每n天发送一次邮件

php - 如何从重复行检查 MYSQL 连接中的一个特定结果

android - 访问函数外部的全局值

c - 如何从函数返回定义的类型(数组)?

python - pandas DataFrame累计值

python - 使用 Flask 流式传输生成的 CSV