在Python中遍历函数参数并保留排序顺序

2 投票
5 回答
840 浏览
提问于 2025-04-17 14:37

我需要在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)

撰写回答