【发布时间】:2018-10-12 22:36:44
【问题描述】:
我在 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 类型参数的尝试,但在谷歌搜索和阅读文档几个小时后,我还没有弄清楚我应该如何处理这个问题。
仅供参考,我无法控制此数据库,因此无法修改存储过程或其他任何内容。
编辑:我没有嫁给 SQLAlchemy。如果有其他库可以处理这个问题,我很乐意使用它。
【问题讨论】:
标签: python sql-server sqlalchemy flask-sqlalchemy