2

Python でストアド プロシージャを呼び出す必要があります。ラッパー関数は n 個のパラメーターを受け入れます。パラメーター リストに基づいて、引数を引用または引用解除する必要があります。null パラメータも送信する必要があります。

関数の引数を反復処理して 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 は初めてなので、どんなリードでも大いに役立ちます。

4

5 に答える 5

0

*args次の構成を使用できます。

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

In [2]: execSp('abc', 1, 'xyz')
('abc', 1, 'xyz')
于 2013-02-03T18:29:35.823 に答える
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>
于 2013-02-03T18:29:43.530 に答える
0
>>> def f(*args):
...   for a in args:
...     print a
... 
>>> f(1, 2, 3, 4)
1
2
3
4
于 2013-02-03T18:30:07.567 に答える
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)
于 2013-02-03T19:07:54.290 に答える
0

独自のクエリを作成する必要がありますか? 通常、DB API を使用して引数を引用します。これにより、SQL インジェクションの被害を回避できます。

cursor.execute('exec SP_TEST(?, ?, ?)', a, b, c)
于 2013-02-03T18:34:09.837 に答える