#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:
Пара предложений для будущего развития:
- Используйте многострочную строковую нотацию
"""
, чтобы лучше идентифицировать синтаксические ошибки (например, пропущенный пробел между столбцом и таблицей в исходном запросе). - Вместо конкатенации строк используйте параметр для
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)