将空值传递给 Python 中的存储过程

Posted

技术标签:

【中文标题】将空值传递给 Python 中的存储过程【英文标题】:Passing nulls to stored procedure in Python 【发布时间】:2012-10-17 15:52:17 【问题描述】:

我正在使用 Python 调用我的 MSSQL 数据库中的存储过程,但它不喜欢传递的“无”值。这可能是 pymssql 中的错误吗?或者有什么方法可以确保将“None”转换为 NULL?我需要能够传递 NULL。

示例代码:

cn = pymssql.connect(my connection info)
cur = cn.cursor()
params = range(2)
params[0] = 1
params[1] = None # this needs to pass as NULL
cur.callproc('mystoredproc', params)

【问题讨论】:

在谷歌上的搜索提出了这个pymssql.sourceforge.net/limitations.php (已经从页面名称中它应该响起)并且正如他们在这里建议的那样,为 NULL 字段提供默认值并对其进行检查为了避免它......我不是专家顺便说一句,这就是我评论的原因:) 我需要能够将 NULL 值传递给存储过程。 【参考方案1】:

它看起来像是一个已知的issue。

更新:我找到了解决方案。虽然 pymssql 模块确实需要修复,但我可以使用它附带的 _mssql 模块并调用较低级别的例程。

例子:

import _mssql
conn = _mssql.connect(connection info, syntax is slightly different than pymssql)
proc = conn.init_procedure('mystoredproc')
proc.bind(1, _mssql.SQLINT4, name='@firstparam')
proc.bind(None, _mssql.SQLINT4, name='@secondparam', null=True)
proc.execute()

需要“null=True”设置以允许此参数接受空值,并且“None”将被转换为 NULL。

【讨论】:

以上是关于将空值传递给 Python 中的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何将 vb.net 中日期的空值传递给 sql 存储过程?

通过数据库上下文将空 DataTable 传递给 SQL Server 存储过程

将空值传递给 SVG 路径(使用 d3.js)以抑制丢失数据

如何将空值传递给 WebAPI 中的可空类型

MySQL 过程将空结果返回给 PHP

Kotlin - 如何将空值传递给片段 newInstance 方法?