2016-12-04 75 views
1

Pythonでcx_Oracleを使用して準備されたOracle文でIN句を使用したいと思います。PythonでOracle Prepared StatementのIN句cx_Oracle

など。クエリ - これは動作しません

import cx_Oracle 
ids = [101, 102, 103] 
ALL_IDS = "('{0}')".format("','".join(map(str, ids))) 
conn = cx_Oracle.connect('username', 'pass', 'schema') 
cursor = conn.cursor() 
results = cursor.execute('select name from employee where id in :id_list', id_list=ALL_IDS) 
names = [x[0] for x in cursor.description] 
rows = results.fetchall() 

からselect name from employee where id in ('101', '102', '103')

pythonの側では、私はこの('101', '102', '103')のように文字列に変換し、Pythonで、次のコードを使用し、リスト[101, 102, 103]を持っています。私は何か間違っているのですか?

答えて

2

このコンセプトは、Oracleではサポートされていません。このアプローチを試してみるのは間違いありません。あなたはどちらかでなければなりません:

  • は値にそれぞれ個別のバインド変数を作成 - この中に示されているとしてPython
  • で行うには非常に簡単でわかりやすいです何か
  • は、Oracle型にキャスト演算子を使用してサブクエリを作成しますポスト:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:210612357425

  • 配列を受け入れ、直接PL/SQL

  • または完全に何かを行う内で複数のクエリを実行するストアドプロシージャを使用します!

0

文字列を作成したので、ほとんど存在します。これはうまくいくはずです:

results = cursor.execute('select name from employee where id in ' + ALL_IDS)