Python - Informix - 字符到数字的转换错误 (-1213)

Posted

技术标签:

【中文标题】Python - Informix - 字符到数字的转换错误 (-1213)【英文标题】:Python - Informix - Character to numeric conversion error (-1213) 【发布时间】:2011-08-21 14:38:57 【问题描述】:

尝试通过 Python 脚本更新 Informix 表时出现错误:

    Character to numeric conversion error (-1213)

数据库请求:

    cursor.execute("update sales set pid = ? where sid = '1'", price)

餐桌销售:

    sid | oid | price | pid

我要更新的列的数据类型为money(10,2)

我尝试将字符串和浮点数作为十进制值插入...哪个合适?

我在 Win 2003 服务器上使用 Informix 10.00 TC6 -

    CLIENT_LOCALE=en_us.819 - DB_LOCALE=en_us.819

要连接到 Informix,我使用的是 pyodbc。

在受支持的数据类型中与金钱无关,因此不确定它是否有效 (http://code.google.com/p/pyodbc/wiki/DataTypes)

【问题讨论】:

向我们展示代码和表格中的内容。 【参考方案1】:

您的数据库驱动程序正在将您的代码转换为 SQL。您可以使用 Informix 调试器查看它生成的 SQL。我知道 Informix 不喜欢其 SQL 中的千位分隔符。

【讨论】:

【参考方案2】:

在您显示的 SQL 中有两种可能的字符串到数字的转换。

    '1' 转换为与sid 相同的类型。 转换作为占位符传递的值(变量price 替换?)。

price 的值是多少? Python 将其值打印为什么?

Informix 在为您进行转换方面非常灵活,因此第一次转换应该没问题。通常,如果sid 是一个字符串列,您只会提供单引号,但它应该可以正常转换。

那么,另一个问题是:PyODBC 对 price 做了什么?

如果您设置环境变量SQLIDEBUG=2:xyz 并运行程序,您可能会看到会发生什么。它将生成一个前缀为xyz_ 的文件,假设您可以使用该文件,则可以使用sqliprint 对其进行处理。这将告诉您客户端(Python)和数据服务器之间发送了什么。根据您找到的内容,它可能会将矛头指向客户端代码或服务器端代码。

【讨论】:

以上是关于Python - Informix - 字符到数字的转换错误 (-1213)的主要内容,如果未能解决你的问题,请参考以下文章

处理大量数字 C、Java、Informix

如何编译 Informix GLS 语言环境/字符集。 (将 .lc 文件转换为 .lco 以创建数据库的 Informix 语言环境)

Informix 连接字符串字段描述和要使用的值

带有准备好的语句的 Informix 日期时间

Informix“加载”命令在 Python pyodbc 中不起作用

Informix 中的子字符串