Одиночная кавычка Python 3 экранирует маркер параметра

Привет я хочу воспроизвести команду sql

SP_HELPTEXT SP_CIW_STEP1

в cursor.execute в pyodb, используя? как маркер параметра.

import pyodbc

ch = pyodbc.connect('DRIVER={SQL Server};SERVER=xxx;DATABASE=yyy;Trusted_Connection=True')
cur = ch.cursor()


cur.execute("sp_helptext '?'", 'SP_CIW_STEP1')

выдает ошибку:

Ошибка программирования: ("SQL содержит 0 маркеров параметров, но был предоставлен 1 параметр", "HY000")


И (спасибо @ryugie)

cur.execute("sp_helptext ?", "'SP_CIW_STEP1'")

также вызывает ошибку:

[SQL Server] Объект ''SP_CIW_STEP1'' не существует в базе данных 'xxx' или недопустим для этой операции


В то время как

cur.execute("? 'SP_CIW_STEP1'", 'sp_helptext')

работает, уступая

Out[28]: <pyodbc.Cursor at 0x9c21db0>

Так что, похоже, одиночная кавычка разрушает маркер параметра. Я попытался поставить \ и добавить г перед строкой. Не работает Любая помощь ценится здесь. Спасибо-

1 ответ

Решение

Маркеры параметров не должны заключаться в кавычки, равно как и значения параметров.

cur.execute("sp_helptext ?", "SP_CIW_STEP1")

должно работать просто отлично.

Другие вопросы по тегам