2015-09-09 2 views
-1

Я на следующей cx_Oracle версииcx_Oracle - «не ожидая None или строку»

>>> cx_Oracle.version 
'5.0.3' 

Я получаю это исключение при выполнении запроса

«ожидающей None или строку»

Запрос выполняется таким образом

cursor.execute("SELECT * FROM APP_STORE WHERE STORE=:STORE %s" %(order_clause),{'STORE':STORE}) 

В чем может быть причина? Подобные запросы, выполненные ранее в потоке, работают нормально, но этого нет.

Цените некоторые рекомендации по этому вопросу.

+0

Вопросы, требующие помощи по отладке (** «почему этот код не работает?» **) должен включать желаемое поведение, * конкретная проблема или ошибка * и * самый короткий код, необходимый для воспроизведения ** в самом вопросе **. Вопросы без ** ясного заявления о проблеме ** не полезны для других читателей. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – MattDMo

ответ

0

Вы неправильно строите свой указатель. Так как вы передадите словарь, вы много первых подготовить запрос:

cursor.prepare("SELECT * FROM APP_STORE WHERE STORE=:STORE %s" %(order_clause)) 

Затем вы выполняете его и передать None в качестве первого параметра.

results = cursor.execute(None, {'STORE':STORE}) 

Если вы хотите изменить параметр STORE и выполнить запрос снова, все, что вам нужно сделать сейчас, это изменить словарь и повторите execute заявление. prepare Вновь это не нужно.

Дополнительную информацию можно найти на странице Oracle+Python Querying best practices documentation. Информация, представленная выше, приведена в разделе «Bind Variable Patterns» (прямая ссылка, похоже, недоступна)