Python - Informix - 字符转数值错误 (-1213)
在尝试通过一个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'
转换为和sid
一样的类型。 - 将作为占位符传入的值(变量
price
,它替代了?
)。
那么,price
的值是什么呢?Python会打印出什么值呢?
Informix在进行转换时相当灵活,所以第一种转换应该没问题。通常情况下,只有在 sid
是字符串类型的列时,才会用单引号包裹,但它应该能顺利转换。
接下来,另一个问题是:PyODBC对 price
做了什么?
你可以通过设置环境变量 SQLIDEBUG=2:xyz
并运行程序,看看会发生什么。这样会生成一个以 xyz_
为前缀的文件,可以用 sqliprint
处理,前提是你有这个工具。这个文件会告诉你客户端(Python)和数据服务器之间发送了什么。根据你发现的内容,可能会指向客户端代码或服务器端代码的问题。
1
你的数据库驱动程序正在把你的代码转换成SQL语言。你可以使用Informix调试工具来查看它生成了什么样的SQL。我知道Informix在SQL中不喜欢用千位分隔符。