【问题标题】:Python cx_Oracle SQL with bind string variable带有绑定字符串变量的 Python cx_Oracle SQL
【发布时间】:2018-01-07 09:31:56
【问题描述】:

我在使用 Python 为 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 的数字。

【问题讨论】:

    标签: python sql oracle


    【解决方案1】:

    您正在为参数使用字典 ({'doknr' : doknumber}),因此它是一个命名参数 - :param needs 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"

    【讨论】:

    • 好吧,我改了,但是cursor.rowcount的值还是0,select :doknr from dual也没有用...
    • rowcount 将用于 DML。对于查询,使用 SELECT COUNT 来获取行数。
    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多