我需要在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来说是新手,所以任何线索都会有很大的帮助。
答案 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)