Ошибка слишком нескольких параметров при использовании pyodb c в запросе, содержащем жестко закодированное предложение where? - PullRequest
1 голос
/ 25 января 2020

Я видел несколько вопросов об ошибке «Слишком мало параметров» , но не нашел такого, который вполне соответствует моей ситуации.

Упрощенный код:

db.cursor.execute ('''SELECT [PT_NUMBER] FROM [newtest1];''')

newtest1 - это сохраненный запрос MS Access, содержащий подзапрос с жестко закодированным where предложением:

SELECT table1.PT_NUMBER, table1.ID
FROM table1
WHERE (table1.ID  In (select ID from table2 where field1 = "TESTVALUE"));

Моя ошибка:

pyodb c .Error : ('07002', '[07002] [Microsoft] [ODB C Драйвер Microsoft Access] Слишком мало параметров. Ожидаемый 1. (-3010) (SQLExecDirectW) ')

Если я вместо этого использую тот же код для выбора из запроса, который не содержит подзапроса с жестко закодированным предложением where, я не получаю ошибки:

db.cursor.execute ('''SELECT [PT_NUMBER] FROM [newtest2];''')

С newtest2, определенным как:

SELECT table1.PT_NUMBER, table1.ID
FROM table1
WHERE (table1.ID In (select ID from table2));

Так что, похоже, это не самая распространенная проблема опечатки имени столбца или проблема передачи в параметр, а не использование ?, по крайней мере, не из кода.

Кажется, что жестко заданный WHERE вызывает проблему, даже если он находится в запросе Access, а не в коде python.

Возможно ли SELECT из запроса Access с подзапросом с жестко закодированным предложением WHERE таким образом, с pyodb c?

Любые указатели будут высоко оценены.

1 Ответ

1 голос
/ 27 января 2020

В итоге я получил правильную работу, используя одинарные кавычки вокруг жестко закодированного значения в запросе доступа вместо двойных кавычек:

WHERE (table1.ID  In (select ID from table2 where field1 = 'TESTVALUE'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...