2011-12-14 41 views
1

廣東話尋找SQL插入語句Informix的發現與蟒蛇informixdb INSERT查詢正確的語法通過Python informixdb

  • 蟒蛇2.6.6
  • 蟒蛇INFORMIXDB版本2.5
  • 驅動程序名稱:IBM Informix- ESQL
  • 驅動程序版本:Debian的擠壓3.50.FC8

這裏的文檔 - 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 

任何暗示什麼,我可以嘗試請得到什麼?

UPDATE:Informix的11.50.xC8

UPDATE

感謝這麼遠。我現在執行下面的查詢,它運行沒有錯誤,但也沒有來自光標的消息,並且它不插入任何東西。如果你有一個建議,它會很好。

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

似乎我明白了。我需要設置conn.autocommit =真 – groovehunter 2011-12-15 11:27:30

回答

2

您應該列出明確地列要填充:

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

Apperently你的表中有更多的列比你供應,或他們是在一個不同的順序。

未公開的列的INSERT語句是一個不好的編程習慣,你應該擺脫掉儘可能快

+0

我假設零件`(:auftragskey,:transitkunde,:status)`是我的列列表!!?我會嘗試 – groovehunter 2011-12-14 16:37:15

0

如果數據庫表中有很多列,想想也創建包含枚舉類型類,並按名稱引用列。在1/2年前我們的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