Не уверен, почему моя хранимая процедура не работает между pyodbc и SQL Server.

Я новичок в Python (2.7) и не очень помог с pyodbc. У меня есть скрипт, который вызывает хранимую процедуру:

sql = "exec gen_all.dbo.rpt_trinity_total '" + startDate + "', '"  + endDate + "'"

print sql
dbCursor.execute(sql)   
rows = dbCursor.fetchall()

for row in rows:
    print row[0], row[1]

В конце хранимой процедуры я вернул переданные даты, просто чтобы убедиться, что SP вызывается при установке параметров. Вроде бы все должно работать, но когда я смотрю на таблицу, которая должна быть заполнена SP, там ничего нет. Если я запускаю SP в консоли управления, все работает нормально.

Я попробовал то, что оказалось решением здесь, а именно:

dbCursor.execute("{call gen_all.dbo.rpt_trinity_total(?,?)}", (startDate),(endDate))

но дал мне те же результаты, ничего. Сам SP очень прост, TRUNCATE и INSERT, используя SELECT, на основе переданных дат.

Просто интересно, может ли кто-нибудь дать некоторое представление об этом. Огромное спасибо.


person spuppett    schedule 11.02.2013    source источник
comment
Только что попробовал этот SP без вставки, только выбор, и он возвращается просто отлично.   -  person spuppett    schedule 12.02.2013


Ответы (1)


Я подозреваю, что проблема в том, что вы не зафиксировали соединение. pyodbc отключает автоматическую фиксацию по умолчанию, чтобы соответствовать спецификациям API Python DB. Попробуйте установить conn.autoCommit = True или позвонить conn.commit() по вашему соединению.

person Yevgen Yampolskiy    schedule 12.02.2013
comment
Вот оно. Спасибо много! - person spuppett; 12.02.2013
comment
То же самое относится и к pymssql - я пытался вызвать хранимую процедуру, но без фиксации она не внесет никаких изменений. Спасибо, что также объяснили это поведение. - person Tony Sepia; 13.07.2020