Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 не отрабатывает процедуру из python  [new]
Serg58
Member

Откуда:
Сообщений: 65
Подскажите, пожалуйста, в чём подвох?

на питоне скрипт вызывает хранимую процедуру:
cursor.callproc('UpdateSeance', (12345, 2))


всё ок, никаких ошибок. Но фактически процедура не отрабатывает, она должна у сеанса 12345 изменить тип на 2 (эти параметры и передаю).

Я запускаю профайлер, вижу, что pymssql подключилось и передаёт:
exec UpdateSeance 12345, 2


беру копирую этот код, вставляю его в SQL SMS и исполняю - всё ок, процедура отрабатывает, тип изменяется ?????!!!! Как так то?

При этом всё остальное работает, если обратится к процедурам возвращающим значения - всё в питон возвращается, всё в штатном режиме. А тут не пойму в чём дело.
30 янв 18, 11:59    [21150326]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Учетки у тебя и питона одинаковые? Права на процедуру "питону" даны?
30 янв 18, 12:06    [21150349]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Кусочек
Guest
автор
что pymssql подключилось и передаёт


Посмотрите в контексте какой базы происходит вызов.

И еще, требуемая UpdateSeance - у Вас находится в схеме dbo?
30 янв 18, 12:15    [21150399]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
Кусочек,

SET NOCOUNT ON;
30 янв 18, 12:21    [21150431]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Кусочек
Guest
Шыфл
Кусочек,

SET NOCOUNT ON;


Если Вы ТС, то - это не контекст базы исполнения.
30 янв 18, 13:18    [21150759]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Кусочек,

он не ТС, но мыслит в правильном направлении
30 янв 18, 13:20    [21150771]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Serg58
Member

Откуда:
Сообщений: 65
Cammomile
Учетки у тебя и питона одинаковые? Права на процедуру "питону" даны?

да, учётки одинаковые, собственно sa.
Права, соответственно, тоже одинаковые.

Кусочек
Посмотрите в контексте какой базы происходит вызов.

у меня при подключении указывается база:
conn.connect(server, user, password, "БАЗА")

Тем более, "соседние" процедуры, которые делают выгрузку данных - исполняются без проблем, данные возвращают.

Кусочек
И еще, требуемая UpdateSeance - у Вас находится в схеме dbo?

да.

Шыфл
SET NOCOUNT ON;

А как мне это поможет?
Данная процедура ни чего не возвращает(мне и не надо), она должна поменять поле(это отразится в совершенно другой программе).
30 янв 18, 14:06    [21151022]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Serg58,

автор
А как мне это поможет?
Данная процедура ни чего не возвращает(мне и не надо), она должна поменять поле(это отразится в совершенно другой программе).

она у вас может матом ругается.

ну и обычная история поиска второй sp с другим овнером

SELECT * FROM sys.objects WHERE Name = 'UpdateSeance'

сколько записей?
30 янв 18, 14:15    [21151077]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Serg58
Member

Откуда:
Сообщений: 65
TaPaK
она у вас может матом ругается.

когда я только вчера начал писать скрипт и написал вызов процедуры без параметров - она ругалась матом.
Потом неправильно параметры передал, она тоже ругалась матом.
Потом дошёл до того что никакой ошибки нет, всё выполняется, но фактически не изменяется поле. Запустил профайлер - вижу, что уходит в базу запрос(процитирован в первом сообщении), беру его, выполняю через SMS - всё работает.

То есть я пока ещё сижу в отладчике питона и вижу ошибки.

TaPaK
ну и обычная история поиска второй sp с другим овнером
SELECT * FROM sys.objects WHERE Name = 'UpdateSeance'

сколько записей?

одна запись.
30 янв 18, 14:25    [21151152]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Serg58
Member

Откуда:
Сообщений: 65
хм...сейчас попробовал вот так переписать, вместо использования callproc(вызов процедуры) обычным запросом:

cursor.execute('exec UpdateSeance 12345, 2')

и вот так попробовал:
args = (12345, 2)
cursor.execute('exec UpdateSeance %d', args)

никаких ошибок, всё ок.

но не работает даже так. Опять же, копирую эти запросы непосредственно в SMS - всё работает.
30 янв 18, 14:50    [21151303]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Serg58,

ну и для нашего спокойствия

автор
cursor.execute('exec dbo.UpdateSeance @paramName1 = 12345, @paramName2 = 2')
30 янв 18, 14:57    [21151331]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Serg58
Member

Откуда:
Сообщений: 65
TaPaK
ну и для нашего спокойствия

дык пробовал ;)

вот сейчас ещё раз пробежался:
cursor.execute('exec UpdateSeance @seance = 12345, @type = 2')

cursor.execute('exec dbo.UpdateSeance @seance = 12345, @type = 2')

- выполняются БЕЗ ошибок, но в БД значение не меняется.
Оба варианта через SMS работают верно, значение меняется.

ради интереса выполнил:
cursor.execute('exec dbo.UpdateSeance @seance = 12345, @type1 = 2')

- питон мне выдаёт: "@type1 is not a parameter for procedure..."

если выполнить вот так:
cursor.execute('exec dbo.UpdateSeance')

выдаёт ошибку: "Procedure or function 'UpdateSeance' expects parameter '@seance', which was not supplied."
Параметр 1 обязательный, как раз @seance
30 янв 18, 15:11    [21151435]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Serg58,

ну и сейчас окажется что сервер не тот, триггер футболит и т.д.
30 янв 18, 15:14    [21151450]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Serg58
Member

Откуда:
Сообщений: 65
ВСЁЁЁ! ;)
заработало)

вот чисто интуитивно решил в конце скрипта дописать:
conn.commit()

и всё работает теперь. Вообще все вышеперечисленные примеры работают и через callproc(вызов процедуры) и и через execute
30 янв 18, 15:16    [21151469]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
autocommit,
Guest
Serg58
ВСЁЁЁ! ;)
заработало)

вот чисто интуитивно решил в конце скрипта дописать:
conn.commit()

и всё работает теперь. Вообще все вышеперечисленные примеры работают и через callproc(вызов процедуры) и и через execute



https://stackoverflow.com/questions/9419276/calling-a-stored-procedure-python
автор
conn = pyodbc.connect(driver = '{SQL Server Native Client 10.0}', server = '(local)', database = 'Inventory', uid = 'sa', pwd = 'p@$$w0rd123',autocommit=True)
30 янв 18, 15:26    [21151524]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает процедуру из python  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Serg58
ВСЁЁЁ! ;)
заработало)

вот чисто интуитивно решил в конце скрипта дописать:
conn.commit()

и всё работает теперь. Вообще все вышеперечисленные примеры работают и через callproc(вызов процедуры) и и через execute

*facepalm* То есть ты просто не читал доку к своим питоновским коннекторам? Яснопонятно.
30 янв 18, 15:45    [21151636]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить