2017-07-31 63 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:from dual'的doknr也不起作用... – fafal

+0

rowcount將用於DML。對於查詢,使用SELECT COUNT來獲取行數。 –