如何识别字符串是否应该参数

时间:2017-03-03 12:15:55

标签: python

我不确定是否有这样做的方法,但这是我的问题:

我有一个dict引用了一些SQL语句:

{
  'var1': """select * from sometable where x=%s"""
  'var2': """select * from sometable"""
}

我有一个脚本,它将使用var1或var2 ......但显然当尝试将参数传递给var2时,它会抛出异常...

我想知道是否有办法确定字符串是否需要参数,然后才尝试传递...

3 个答案:

答案 0 :(得分:2)

一种简单的方法是计算%s字符串。

在某些极端情况下会失败,但基本上是

sql_string.count('%s')

为您提供预期参数的数量。

d = {
  'var1': """select * from sometable where x=%s""",
  'var2': """select * from sometable"""
}

for k,v in d.items():
    print("{}, {} args".format(k,v.count("%s")))

结果:

var2, 0 args
var1, 1 args

你有其他格式而不是%s你可以使用正则表达式来匹配其他格式,如下所示:

len(re.findall("%[ds]",sql_string)

上述两种解决方案都远非完美。例如,他们不会处理%逃脱。

答案 1 :(得分:1)

你的意思是?

if "%s" in sql_stmt:
    do_something()

您也可以使用sql_stmt.count('%s')来获取参数数量。

答案 2 :(得分:0)

dict = {
  "var1": "select * from sometable where x=%s",
  "var2": "select * from sometable"
}
for k,v in dict.iteritems():
    if "%s" in v:
        print "[%s] needs an argument"%v
    else:
        print "[%s] doesn't need an argument"%v

给出:

[select * from sometable where x=%s] needs an argument
[select * from sometable] doesn't need an argument