и после изучения кода для метода callproc выясняется, что в базовом модуле DBAPI pymssql вообще отсутствует поддержка аргументов типа последовательности или табличных параметров.
я есть хранимая процедура на сервере MSSQL, "prc_add_names", которая принимает параметр табличного значения. Сам параметр имеет пользовательский тип "StringTable", определенный следующим образом:
CREATE TYPE [dbo].[StringTable] AS TABLE([strValue] [nvarchar](max) NULL)
Я понятия не имею, как выполнить эту процедуру, используя SQLAlchemy. Я привык вызывать процедуры с использованием аргументовsession.execute
нравится:
result = session.execute('prc_do_something :pArg', {pArg:'foo'})
Однако это не сработает, если я просто передам список строк в качестве аргумента:
result = session.execute('prc_add_names :pArg', {pArg: ['Name One', 'Name Two']})
что приводит к:
sqlalchemy.exc.ProgrammingError: (pymssql.ProgrammingError) (102, "Incorrect syntax near 'Name One'.DB-Lib error message 20018, severity 15:
General SQL Server error: Check messages from the SQL Server
") [SQL: 'prc_add_names %(pArg)s'] [parameters: {'pArg': ['Name One', 'Name Two']}] (Background on this error at: http://sqlalche.me/e/f405)
Очевидно, что SQLAlchemy не воспринимает мой список строк как попытку создать мой аргумент типа StringTable, но после пары часов поиска в Google и чтения документации я так и не понял, как мне следует с этим справляться.
К вашему сведению, я не контролирую эту базу данных, поэтому изменить хранимую процедуру или что-то еще там не вариант.
РЕДАКТИРОВАТЬЯ не женат на SQLAlchemy. Если есть другая библиотека, которая может справиться с этим, я был бы рад использовать ее вместо этого.