Я новичок в 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. Любая помощь?. Заранее спасибо !!!