Выполнение хранимой процедуры SQL в скрипте Python

#python #sql-server #stored-procedures

#python #sql-сервер #хранимые процедуры

Вопрос:

Я пытаюсь выполнить хранимую процедуру SQL в скрипте Python и у меня проблемы с синтаксисом. Я попробовал комбинацию различных примеров, которые я нашел, но, похоже, ни один из них не работает. Вот что я пробовал:

 county = 100200
confirmed = 123456
death = 12
labTestCount = 0    
#Example1
conn.execute('{CALL [spInsertCOVIDData](@County,@Confirmed,@Death,@LabTestCount)}', ('county', 'confirmed', 'death', 'labTestCount'))

#Example2
query = "EXEC [spInsertCOVIDData] (@County,@Confirmed,@Death,@LabTestCount)", (county, confirmed, death, labTestCount)
conn.execute(query)

#Example3
query = "EXEC [spInsertCOVIDData] @County=?, @Confirmed=?, @Death=?, @LabTestCount=?",(county, confirmed, death, labTestCount)
conn.execute(query)

#Example4
query = "EXEC [spInsertCOVIDData] @County='county', @Confirmed='confirmed', @Death='death', @LabTestCount='labTestCount'"
conn.execute(query)
  

Я получаю смесь различных ошибок из:

 ('The SQL contains 0 parameter markers, but 4 parameters were supplied', 'HY000')
  

или

 The first argument to execute must be a string or unicode query.
  

Комментарии:

1. какой компонент database engine вы вызываете?

2. @E.J.Brennan SQL Server 2016

3. Предполагая, что вы используете psycopg2 I, я привык, чтобы аргументы в строке sql были %s not @County , поэтому conn.execute('{CALL [spInsertCOVIDData](%s ,%s, %s, %s)}', (val1, val2, val3, val4))

Ответ №1:

Вы можете попытаться использовать параметры в своем заявлении, используя ? в качестве заполнителя и передавая фактические значения каждого параметра:

 county = 100200
confirmed = 123456
death = 12
labTestCount = 0

query = "EXEC [spInsertCOVIDData] @County=?, @Confirmed=?, @Death=?, @LabTestCount=?"
conn.execute(query, (county, confirmed, death, labTestCount))