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

时间:2011-08-21 14:38:57

标签: python casting informix

尝试通过Python脚本更新Informix表时,我收到错误:

    Character to numeric conversion error (-1213)

db请求:

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

表销售:

    sid | oid | price | pid

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

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

我在Win 2003 Server上使用Informix 10.00 TC6 -

    CLIENT_LOCALE=en_us.819 - DB_LOCALE=en_us.819

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

支持的数据类型中没有关于资金的内容,因此不确定它是否有效(http://code.google.com/p/pyodbc/wiki/DataTypes)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  1. '1'转换为与sid相同的类型。
  2. 转换作为占位符传递的值(变量price代替?)。
  3. price的价值是多少? Python打印它的价值是什么?

    Informix非常灵活地为您进行转换,因此第一次转换应该没问题。通常情况下,如果sid是字符串列,则只提供单引号,但它应该转换为正常。

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

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