ошибка выполнения SQL-запроса из cursor.execute в pyodbc версии python 3.2.5 onm win 7

#sql-server #sql-server-2008 #python-3.x #windows-7 #pyodbc

#sql-сервер #sql-сервер-2008 #python-3.x #windows-7 #pyodbc

Вопрос:

Я работаю над pyodbc в Eclipse (4.3.2v20140221-1852) с PyDev на Win 7. Мой python — 3.2.5.

В моем коде:

  cursor.execute("select top "   str(1)   " a.my_id, a.mycode"   
               "from my_table as a where a.mycode = ?", aGivenCode)
 

Я получил сообщение об ошибке :

 pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver]
[SQL Server]Incorrect syntax near the keyword 'as'. (156) (SQLExecDirectW)")
 

Почему я получил ошибку в » as a «?

Спасибо!

Ответ №1:

Пара предложений для будущего развития:

  1. Используйте многострочную строковую нотацию """ , чтобы лучше идентифицировать синтаксические ошибки (например, пропущенный пробел между столбцом и таблицей в исходном запросе).
  2. Вместо конкатенации строк используйте параметр для TOP значений. Значение должно быть заключено в круглые скобки.

В соответствии с этими рекомендациями ваш исходный код будет обновлен до:

 top = 1
cursor.execute("""select top (?) a.my_id, a.mycode
                  from my_table as a
                  where a.mycode = ?""",
               (top, aGivenCode))
 

Ответ №2:

Попробуйте это? Я думаю, что вам не хватает места там:

 cursor.execute("select top "   str(1)   " a.my_id, a.mycode from my_table as a where a.mycode = ?", aGivenCode)
 

Видите, как нет пробела между ‘a.mycode’ и ‘from my_table’? Я не уверен на 100%, что это правильно, но попробуйте.

Эти вещи также легче отлаживать следующим образом:

 sql = "select top "   str(1)   " a.my_id, a.mycode from my_table as a where a.mycode = ?"
print sql
cursor.execute(sql, aGivenCode)