2017-07-31 156 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来获取行数。 –