Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cx_Oracle:错误933。ORA-00933:“SQL命令未正确结束”:SQL命令错误?_Python_Sql_Oracle_Python 3.x_Cx Oracle - Fatal编程技术网

Python cx_Oracle:错误933。ORA-00933:“SQL命令未正确结束”:SQL命令错误?

Python cx_Oracle:错误933。ORA-00933:“SQL命令未正确结束”:SQL命令错误?,python,sql,oracle,python-3.x,cx-oracle,Python,Sql,Oracle,Python 3.x,Cx Oracle,以前也有人问过类似的问题,但我仍然无法找到解决方案。我的代码: try: connection = cx_Oracle.connect(ORACLE_CONNECT) logger.info("Connection to Oracle success.") print ("Oracle DB version: " + connection.version) print ("Oracle client encoding: "

以前也有人问过类似的问题,但我仍然无法找到解决方案。我的代码:

    try:
        connection = cx_Oracle.connect(ORACLE_CONNECT)
        logger.info("Connection to Oracle success.")
        print ("Oracle DB version: " + connection.version)
        print ("Oracle client encoding: " + connection.encoding)
        print ("Python version: " + platform.python_version())
    except cx_Oracle.DatabaseError as e:
        error, = e.args
        if error.code == 1017:
            print ("Username/password invalid.")
            logger.debug("Username/password invalid: %s", error.code)
        else:
            logger.debug("Database connection error: %s", e)
            print ("Database connection error: %s".format(e))
        raise

    cursor = connection.cursor()
    smsreport_text_new = tuple(smsreport_text)
    find_command = self.identify_unique_msgid(smsreport_list)
    cursor.execute(find_command)

 def identify_unique_msgid(self, smsreport_list):
    msgid_i_to_be_crosschecked = smsreport_list.get('msgid_i')
    msgid_ii_to_be_crosschecked = smsreport_list.get('msgid_ii')
    find_command = 'SELECT * FROM myTable WHERE msgid_i = {0}'.format(msgid_i_to_be_crosschecked)
    print (find_command)

    return find_command
find_命令如下所示:

SELECT * FROM myTable WHERE msgid_i = 2R67C865FB6ZHG5A9
我尝试过在SQL查询的末尾使用分号和不使用分号,但仍然失败。我知道连接可以工作,因为我有另一个查询,请参见下文,这会将数据写入表中。当我试图查找包含特定值的行时,我才收到此错误消息

insert into xura_push (date_sms, result_sms, msgid, msgparts, msgid_i, msgid_ii) values (TO_DATE(:1, 'dd-mon-yyyy hh24:mi:ss'), :2, :3, :4, :5, :6)
我哪里做错了


干杯,pymat。

如上所述,使用以下参数:

def identify_unique_msgid(self, smsreport_list):
    msgid_i_to_be_crosschecked = smsreport_list.get('msgid_i')
    msgid_ii_to_be_crosschecked = smsreport_list.get('msgid_ii')
    find_command = 'SELECT * FROM myTable WHERE msgid_i = :msgid'
    return find_command, dict(msgid = msgid_i_to_be_crosschecked)

cursor = connection.cursor()
smsreport_text_new = tuple(smsreport_text)
find_command, args = self.identify_unique_msgid(smsreport_list)
cursor.execute(find_command, args)

使用参数,而不是将值直接放入字符串中。实际上,字符串常量需要单引号。@GordonLinoff您的意思是find_命令应该类似于上面的insert命令吗?如果您不太在意,我想您可以从myTable中使用SELECT*,其中msgid_I=\'{0}\',但是,是的,您应该使用参数化查询。@SudiptaMondal似乎可以工作。如果我正在进行查询,如何查看查询结果?命令刚刚执行,但不确定从这里到哪里。@pymat您可以使用db_records=cursor.fetchall;然后迭代db_记录