Я пытался вызвать эту хранимую процедуру с параметрами, но безрезультатно. Я думаю, что я понял часть параметров, но теперь я думаю, что я просто неправильно называю хранимую процедуру. Я попытался документировать мои различные подходы как можно лучше с их сообщениями об ошибках (ниже). Как я могу вызвать хранимую процедуру с параметрами и записать в фрейм данных?
Попробуйте A: Использование соединения-заполнителя с параметрами в словаре и% s для переменной
params1 = {'mo1_start_date' : '12/30/2019', 'mo1_end_date' : '01/26/2020'}
placeholders = ','.join('?' for i in range(len(params1.values()))) # '?,?'
interconnectmo1 = """exec TNT.dbo.abc \
@start_date = %(mo1_start_date)s -- datetime \
, @end_date = %(mo1_end_date)s -- datetime \
, @syscode = NULL -- varchar(8000) \
, @estimate_ids = NULL -- varchar(8000)""" %placeholders
sqlmo1 = pd.read_sql(interconnectmo1, conn, params1)
Ошибка A: Ошибка типа: форматирование требует сопоставления
Попробуйте B: Нет заполнитель присоединяется с параметрами в словаре и? для переменной
params1 = {'mo1_start_date' : '12/30/2019', 'mo1_end_date' : '01/26/2020'}
interconnectmo1 = """exec TNT.dbo.abc\
@start_date = ? -- datetime \
, @end_date = ? -- datetime \
, @syscode = NULL -- varchar(8000) \
, @estimate_ids = NULL -- varchar(8000)"""
sqlmo1 = pd.read_sql(interconnectmo1, conn, params1)
Ошибка B: [ODB C SQL Драйвер сервера] Поле COUNT неверно или синтаксическая ошибка (0) (SQLExecDirectW)
Попробуйте C: Использование соединение заполнителя с параметрами в списке и% s для переменной
params1 = {'mo1_start_date' : '12/30/2019', 'mo1_end_date' : '01/26/2020'}
paramsmo1=list(params1.values())
placeholders = ','.join('?' for i in range(len(paramsmo1))) # '?,?'
interconnectmo1 = """exec TNT.dbo.abc\
@start_date = %(mo1_start_date)s -- datetime \
, @end_date = %(mo1_end_date)s -- datetime \
, @syscode = NULL -- varchar(8000) \
, @estimate_ids = NULL -- varchar(8000)""" %placeholders
sqlmo1 = pd.read_sql(interconnectmo1, conn, paramsmo1)
ошибка C: ошибка типа: для формата требуется сопоставление
Попробуйте D: нет соединения заполнителя с параметрами в словаре и% s для переменной
params1 = {'mo1_start_date' : '12/30/2019', 'mo1_end_date' : '01/26/2020'}
interconnectmo1 = """exec TNT.dbo.abc\
@start_date = "%(mo1_start_date)s" -- datetime \
, @end_date = "%(mo1_end_date)s" -- datetime \
, @syscode = NULL -- varchar(8000) \
, @estimate_ids = NULL -- varchar(8000)""" % (params1)
sqlmo1 = pd.read_sql(interconnectmo1, conn, params1)
Ошибка D: Процедура или функция ожидает параметр '@end_date', который не был указан.
Попробуйте E: Попытка с курсором ..
params1 = {'mo1_start_date' : '12/30/2019', 'mo1_end_date' : '01/26/2020'}
csr = conn.cursor()
interconnectmo1 = csr.execute("""exec TNT.dbo.abc \
@start_date = "%(mo1_start_date)s" -- datetime \
, @end_date = "%(mo1_end_date)s" -- datetime \
, @syscode = NULL -- varchar(8000) \
, @estimate_ids = NULL -- varchar(8000)""" % (params1))
csr.execute(interconnectmo1, (params1))
Ошибка E: Процедура или функция ожидает параметр '@end_date', который не был указан.