在Python中遍历函数参数并保留排序顺序
我需要在Python中调用一个存储过程。这个包装函数可以接受任意数量的参数。根据这些参数的不同,我需要对它们进行加引号或去引号的处理。同时,我还需要发送一个空参数。
我该如何遍历这些函数参数并构建SQL字符串呢?
比如,调用存储过程的方式是这样的 - SP_TEST('chrA',intB,chrC)
def execSp(a,b,c,d):
<iterate through params and build param list>
#If the parameter c is null the SQL should be built as below
SQL="exec SP_TEST('a',b,Null)";
我试过使用locals(),但是它返回的是一个无序的列表。
我对Python还很陌生,所以任何帮助都将非常有用。
5 个回答
0
你需要自己写查询吗?一般来说,你可以依靠数据库的API来帮你处理参数,这样可以避免SQL注入的问题。
cursor.execute('exec SP_TEST(?, ?, ?)', a, b, c)
0
你可以使用 *args
这个写法:
In [1]: def execSp(*args): print args
In [2]: execSp('abc', 1, 'xyz')
('abc', 1, 'xyz')
0
下面的代码正好实现了你想要的功能。它首先把列表 AV 初始化为全是 NULL,然后根据你提供的参数数量进行循环,适当地替换这些参数,形成你想要的查询字符串。SQL =
这个字符串只给第一个参数加了引号。我理解你想做的事情对吗?
def execSp(*args):
AV = []
SQL = "exec SP_TEST(";
for ii in range(0,4) :
AV.append("NULL");
ii = 0;
for a in args:
AV[ii] = str(a);
ii+=1;
SQL = SQL + "\'" + AV[0] + "\'," + AV[1] + "," + AV[2] + "," + AV[3] + ")";
print SQL
execSp("hello", 1, 2, 3);
execSp("hi", 2, 3);
当我运行这个时,我得到了
exec SP_TEST('hello',1,2,3)
exec SP_TEST('hi',2,3,NULL)