Python 如何将逗号分隔的 sys argv 转换为 '1','2'(用于 MySQL "IN" 查询)

0 投票
2 回答
2924 浏览
提问于 2025-04-18 05:29

我想执行以下的MySQL查询:

SELECT id,list_id,fname,lname,email,gender,birth_date,city,state,country,zip FROM lists_users WHERE status='a' AND list_id IN ('1','2')

这里的list_id将是一个用逗号分隔的系统参数。

在Python中,1,2,3,4会被当作一个系统参数,对吧?

接下来,我需要把它变成SQL可以用的格式,也就是在每个用逗号分隔的值周围加上单引号。我猜应该有一种非常简单的一行代码可以做到这一点。但我对Python还很陌生,所以不知道从哪里开始。(通常我会用一个循环之类的,然后手动在所有值周围加上单引号。)

2 个回答

0

我需要把它变成SQL兼容的格式,也就是在每个用逗号分隔的值周围加上单引号。

你对“SQL兼容”的定义真是奇怪。如果这个字段是数字类型,那它们就应该是数字。不过,首先要确保它们确实是数字。

nums = sys.argv[whatever].split(',')
try:
  in_val = ','.join(str(int(x)) for x in nums)
except ValueError:
  print >>sys.stderr, "No! Bad!"
  sys.exit(1)
0

sys.argv 会包含一些字符串,所以你只需要把这些值包装起来,方便查询。

In [9]: sql_string = ",".join("'%s'"%i for i in sys.argv[1:])

In [12]: sql_string
Out[12]: "'1','3','4'"

在你的 SQL 语句中,这些值会被当作字符串来替换。

In [13]: "...AND list_id IN (%s)"%sql_string
Out[13]: "...AND list_id IN ('1','3','4')"

如果你的命令行参数是这样指定的:1 2 3,那么这个方法是有效的。

如果你想把它们指定为 1,2,3,那么你需要先运行一个 split 命令:

In [9]: sql_string = ",".join("'%s'"%i for i in sys.argv[1].split(","))

撰写回答