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)的主要内容,如果未能解决你的问题,请参考以下文章
如何编译 Informix GLS 语言环境/字符集。 (将 .lc 文件转换为 .lco 以创建数据库的 Informix 语言环境)