J'ai une procédure stockée sur le serveur MSSQL, "prc_add_names", qui prend un paramètre de valeur de table. Le paramètre lui-même est d'un type personnalisé "StringTable" défini comme suit :
CREATE TYPE [dbo].[StringTable] AS TABLE([strValue] [nvarchar](max) NULL)
Je n'ai aucune idée de la manière d'exécuter cette procédure à l'aide de SQLAlchemy. J'ai l'habitude d'appeler des procédures avec des arguments en utilisant session.execute
comme ça :
result = session.execute('prc_do_something :pArg', {pArg:'foo'})
Cependant, cela ne fonctionne pas si je passe simplement une liste de chaînes de caractères comme argument :
result = session.execute('prc_add_names :pArg', {pArg: ['Name One', 'Name Two']})
ce qui conduit à :
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)
Il est évident que SQLAlchemy ne comprend pas que ma liste de chaînes de caractères est une tentative de création d'un argument de type StringTable, mais après quelques heures de recherche sur Internet et de lecture de la documentation, je n'ai pas compris comment je devais gérer cela.
Pour votre information, je n'ai pas le contrôle de cette base de données, il n'est donc pas possible de modifier la procédure stockée ou quoi que ce soit d'autre.
EDIT : Je ne suis pas marié à SQLAlchemy. S'il existe une autre bibliothèque qui peut gérer cela, je serais heureux de l'utiliser à la place.