通过python informixdb寻找informix的SQL插入语法

时间:2011-12-14 16:27:43

标签: python sql informix

无法使用python informixdb

找到INSERT查询的正确语法
  • python 2.6.6
  • python INFORMIXDB版本2.5
  • 驱动程序名称:IBM Informix-ESQL
  • 驱动程序版本:3.50.FC8
  • 关于debian squeeze

这是doc - http://informixdb.sourceforge.net/manual.html#binding-parameters

>>> cursor.execute('INSERT INTO names VALUES(:first,:last,:age)',
...                dict(first='some', last='body', age=56) )

所以我尝试了例如

 cursor.execute('INSERT INTO transit_auftrag_i VALUES(:auftragskey,:transitkunde,:status)',dict(auftragskey='erII',transitkunde='DMIeLE',status='OK') )

这是我在这个例子中得到的

<class '_informixdb.ProgrammingError'>
('PREPARE', -236, [{'message': 'Insert value list does not match column list', 'sqlstate': '21S01'}])
<class '_informixdb.ProgrammingError'>
('DESCRIBE', -410, [{'message': 'Syntax error or access violation in PREPARE or EXECUTE IMMEDIATE', 'sqlstate': '37000'}])
Segmentation fault

任何暗示我可以尝试的东西吗?

更新:informix 11.50.xC8

更新

到目前为止,谢谢。我现在执行以下查询,它运行没有错误,但也没有来自游标的消息,它不插入任何东西。如果你有建议那就太好了。

cursor.execute("INSERT INTO transit_auftrag_i (auftragskey,transitkunde,status) VALUES (:a,:b,:c)", dict(a='A',b='B',c='C') )

2 个答案:

答案 0 :(得分:2)

您应该明确列出要填充的列:

INSERT INTO names (firstname, lastname, age) VALUES (:first,:last,:age)

您的表格显然比您提供的列数多,或者它们的顺序不同。

不说明INSERT语句的列是一个糟糕的编程习惯,你应尽快摆脱

答案 1 :(得分:0)

如果您的数据库表有很多列,请考虑创建一个包含枚举类型的类,并按名称引用列。在1年半前的AMR项目开始时,我尝试在20+列表中使用索引号来引用列(来自供应商的数据输入);这是一场灾难,直到我创建了一个班级。

以下内容适用于Python 2.6.5。

premid = mapErtToPremId(ins_row[d.DeviceID], ins_row[d.DeviceType], ins_row[d.ChannelNumber], db)


class drIdx():
    def __init__(self):
        self.MeterID = 0
        self.Reading = 1
        self.ReadingDateTime = 2
        self.Account = 3
        self.CustomerLN = 4
        self.CustomerFN = 5
        self.DeviceID = 6
        self.DeviceType = 7
        self.ChannelNumber = 8
        self.DecodeType = 9
        self.LoadDateLocal = 10
        self.PremiseID = 11