我想做以下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将是逗号分隔的系统arv。
在Python中,1,2,3,4都是ONE sys argv,对吗?
然后我需要通过在每个逗号分隔值周围添加单引号来使其兼容SQL。我猜测可能有一条非常简单的方法可以做到这一点。但对于Python来说却是新手,所以不知道从哪里开始。 (通常会执行for循环或其他操作,然后在所有值周围手动广告单引号。
答案 0 :(得分: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(","))
答案 1 :(得分: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)