Python,如何使用逗号分隔的sys argv,并使其像'1','2'(对于MySQL“IN”查询)

时间:2014-05-06 01:30:46

标签: python mysql

我想做以下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循环或其他操作,然后在所有值周围手动广告单引号。

2 个答案:

答案 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)