我不确定是否有这样做的方法,但这是我的问题:
我有一个dict引用了一些SQL语句:
{
'var1': """select * from sometable where x=%s"""
'var2': """select * from sometable"""
}
我有一个脚本,它将使用var1或var2 ......但显然当尝试将参数传递给var2
时,它会抛出异常...
我想知道是否有办法确定字符串是否需要参数,然后才尝试传递...
答案 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