2017-07-31 10 views
0

Pythonを使用してOracleデータベースのSQLクエリを作成する際に問題があります。 文字列変数をバインドしたいのに機能しません。何が間違っているのか教えていただけますか? これは私のコードです:Python cx_Oracle SQLバインド文字列変数

import cx_Oracle 

dokList = [] 

def LoadDatabase(): 
    conn = None 
    cursor = None 
    try: 
     conn = cx_Oracle.connect("login", "password", "localhost") 

     cursor = conn.cursor() 

     query = "SELECT * FROM DOCUMENT WHERE DOC = :param" 

     for doknumber in dokList: 

      cursor.execute(query, {'doknr':doknumber}) 
      print(cursor.rowcount) 

    except cx_Oracle.DatabaseError as err: 
     print(err) 
    finally: 
     if cursor: 
      cursor.close() 
     if conn: 
      conn.close() 

def CheckData(): 

    with open('changedNamed.txt') as f: 
     lines = f.readlines() 

     for line in lines: 
      dokList.append(line) 

CheckData() 
LoadDatabase() 

cursor.rowcountの出力は0であるが、それは0

答えて

1

より大きい数でなければなりませんあなたはパラメータの辞書({'doknr' : doknumber})を使用しているので、それは名前のですパラメータ - :paramneeds to match the key name。これを試してみてください:将来のトラブルシューティングのために

query = "SELECT * FROM DOCUMENT WHERE DOC = :doknr" 
for doknumber in dokList: 
     cursor.execute(query, {'doknr':doknumber}) 
     print(cursor.rowcount) 

、あなたのパラメータが適切に渡さなっているかどうかを確認するために、あなたも"select :param from dual"にクエリを変更してみてください。

+0

私はそれを変更しましたが、 'cursor.rowcount'の値はまだ0であり、' select:doknr from dual'も動作しませんでした。 – fafal

+0

rowcountはDML用です。照会の場合は、SELECT COUNTを使用して行数を取得します。 –

関連する問題