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

1 投票
2 回答
1584 浏览
提问于 2025-04-17 00:03

在尝试通过一个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)

我试着用Decimal值、字符串和浮点数插入...哪种方式比较合适呢?

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

    CLIENT_LOCALE=en_us.819 - DB_LOCALE=en_us.819

我用pyodbc连接到Informix。

在支持的数据类型中没有关于money的说明,所以不确定它是否能正常工作(http://code.google.com/p/pyodbc/wiki/DataTypes)

2 个回答

0

在你展示的SQL中,有两种可能的字符串转数字的方式。

  1. '1' 转换为和 sid 一样的类型。
  2. 将作为占位符传入的值(变量 price,它替代了 ?)。

那么,price 的值是什么呢?Python会打印出什么值呢?

Informix在进行转换时相当灵活,所以第一种转换应该没问题。通常情况下,只有在 sid 是字符串类型的列时,才会用单引号包裹,但它应该能顺利转换。

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

你可以通过设置环境变量 SQLIDEBUG=2:xyz 并运行程序,看看会发生什么。这样会生成一个以 xyz_ 为前缀的文件,可以用 sqliprint 处理,前提是你有这个工具。这个文件会告诉你客户端(Python)和数据服务器之间发送了什么。根据你发现的内容,可能会指向客户端代码或服务器端代码的问题。

1

你的数据库驱动程序正在把你的代码转换成SQL语言。你可以使用Informix调试工具来查看它生成了什么样的SQL。我知道Informix在SQL中不喜欢用千位分隔符。

撰写回答