создание и вызов хранимой процедуры, передача значений в хранимую процедуру из python - PullRequest
0 голосов
/ 05 мая 2019

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

Я просмотрел несколько вопросов здесь. Из того, что я мог понять, я использовал формат ODBC, и он работает для процедур, не требующих передачи чего-либо. Запрос прост. требуется 2 параметра route_no и month. затем запрос подсчитывает количество трио, взятых автобусом за дату за этот месяц на этом маршруте.

if __name__ == "__main__":
conn=pyodbc.connect('''Driver={SQL Server};'''
                       '''Server=ABY;'''
                       '''Database=testing;'''
                       '''Trusted_Connection=yes;''')

cursor=conn.cursor()     
proc3="""CREATE PROCEDURE TRIPS_PER_DAY @ROUTENO NVARCHAR(30),@MONTH NVARCHAR(30)
         AS
         BEGIN
         SELECT [ON DATE],SUM(DISTINCT([TRIP NO])) AS SUM_TRIPS
         FROM testing.dbo.sheet1$
         WHERE [ROUTE NO#]=@ROUTENO AND MONTH([ON DATE])=@MONTH
         GROUP BY [ON DATE]
         END"""

drop_proc3="""IF EXIST(SELECT * FROM SYS.OBJECTS WHERE TYPE='P' AND NAME='TRIPS_PER_DAY') DROP PROCEDURE TRIPS_PER_DAY"""
call_proc3="""{CALL testing.dbo.TRIPS_PER_DAY(?)(?)}"""
cursor.execute(drop_proc3)
cursor.execute(proc3)
values=('16','11-11-2017')
dff=pd.read_sql(call_proc3,conn,params=(values,))
print(dff)

это ошибка, которую я получаю:

DatabaseError: Ошибка выполнения в sql '{CALL testing.dbo.PASS_PER_STOP (?) (?)}': ('42000', '[42000] [Microsoft] [Драйвер ODBC SQL Server] Синтаксическая ошибка или нарушение доступа ( 0) (SQLPrepare) ')

Я не уверен, правильный ли метод, который я использую, или синтаксическая ошибка. Я также не уверен, как передавать значения и возвращать результаты из процедуры с использованием Python. Любая помощь?. Заранее спасибо !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...