ищет синтаксис SQL-вставки для informix через python informixdb - PullRequest
1 голос
/ 14 декабря 2011

Не могу найти правильный синтаксис для запроса INSERT с python informixdb

  • python 2.6.6
  • python INFORMIXDB версии 2.5
  • имя драйвера: IBM Informix-ESQL
  • версия драйвера: 3.50.FC8
  • в Debian Squeeze

вот документ - 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 ]

2 голосов
/ 14 декабря 2011

Вы должны явно указать столбцы, которые вы хотите заполнить:

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

Возможно, в вашей таблице больше столбцов, чем вы предоставляете, или они находятся в другом порядке.*

Не указывать столбцы для оператора INSERT - плохая привычка программирования, поэтому вы должны избавиться как можно скорее

0 голосов
/ 14 декабря 2011

Если в вашей таблице базы данных много столбцов, рассмотрите возможность создания класса, содержащего перечисляемые типы, и обращайтесь к столбцам по имени. В начале нашего проекта AMR 1 1/2 года назад я пытался ссылаться на столбцы, используя только номера индексов в таблице с 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
...