Python 如何将逗号分隔的 sys argv 转换为 '1','2'(用于 MySQL "IN" 查询)
我想执行以下的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(","))