cx_Oracle: Error 933. ORA-00933: “SQL command not properly ended”: SQL command error?
cx-oracle, oracle, python, python-3.x, sql
Solution
As mentioned in the comments above, use parameters as in the following:
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)
Problem
Similar questions have been asked before but I've still been unable to identify a solution for this. My code: ``` 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 ``` The `find_command` looks like this: ``` SELECT * FROM myTable WHERE msgid_i = 2R67C865FB6ZHG5A9 ``` I've tried with and without a semi-colon at the end of the SQL query, but still fails. I know the connection works because I have another query (see below) and this writes data to the table. It's just when tried to find rows which contain certain values do I get this error message. ``` 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) ``` Where am I going wrong? Cheers, pymat.