gpt4 book ai didi

python - pymysql 中的可选 WHERE 条件执行

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:11 25 4
gpt4 key购买 nike

我有一个 mysql SELECT 查询,我想使用 pymysql 通过 python 执行。为避免重复,我希望该方法采用一些可选参数,这些参数应定义 SELECT 是否应将它们用作 WHERE 条件。

最小的例子:

def select_from_db(arg1 = None, arg2 = None):
db_connection = connect_to_db()
cursor = db_connection.cursor()
where_condition_one = ' and arg1 = %s'.format(arg1) if arg1 else ''
where_condition_two = ' and arg2 = %s'.format(arg2) if arg2 else ''
cursor.execute('SELECT * FROM tableName WHERE 1=1 ',(where_condition_one, where_condition_two))
#Handle result...

问题是调用 select_from_db() 的结果查询是:

SELECT * FROM tableName WHERE 1=1 '' ''

虽然我希望它是:

SELECT * FROM tableName WHERE 1=1

我试过使用 None 而不是 '',但后来我得到:

SELECT * FROM tableName WHERE 1=1 None None

有没有什么优雅的方法可以通过一个执行语句实现我的目标,而不会让我自己暴露在 sql 注入(inject)中?

最佳答案

sql = 'SELECT * FROM tableName WHERE 1=1 '
args = []
if arg1:
sql += ' and arg1 = %s'
args.append(arg1)
if arg2:
sql += ' and arg2 = %s'
args.append(arg2)
cursor.execute(sql, args)

或者减少重复:

sql = ['SELECT * FROM tableName WHERE 1=1']
args = []

def add_arg(name, value):
if value:
sql.append('and {} = %s'.format(name))
args.append(value)

add_arg('arg1', arg1)
add_arg('arg2', arg2)

cursor.execute(' '.join(sql), args)

关于python - pymysql 中的可选 WHERE 条件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49688208/

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