迭代函数参数并保留python中的排序顺序

时间:2013-02-03 18:26:34

标签: python function arguments locals ordereddictionary

我需要在python中调用一个存储过程。 包装函数接受n个参数。 根据参数列表,我需要引用或取消引用参数。我还需要发送一个null参数。

如何遍历函数参数并构建SQL字符串?

例如。存储的proc调用如下所示 - 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 :(得分:0)

您可以使用*args构造:

In [1]: def execSp(*args): print args

In [2]: execSp('abc', 1, 'xyz')
('abc', 1, 'xyz')

答案 1 :(得分:0)

您可以这样做:

def execSp(*args):
    if len(args) != 4:
        raise SomeException()
    a,b,c,d = args
    <you can now iterate over args and use a,b,c,d as required>

答案 2 :(得分:0)

>>> def f(*args):
...   for a in args:
...     print a
... 
>>> f(1, 2, 3, 4)
1
2
3
4

答案 3 :(得分:0)

您需要构建自己的查询吗?通常,您会依赖DB api为您引用您的参数。这样可以避免您遭受SQL注入。

cursor.execute('exec SP_TEST(?, ?, ?)', a, b, c)

答案 4 :(得分: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)