и после изучения кода для метода 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. Если есть другая библиотека, которая может справиться с этим, я был бы рад использовать ее вместо этого.

Ответы на вопрос(2)

Ваш ответ на вопрос