Одиночная кавычка 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")
должно работать просто отлично.