Python - Informix - Ошибка преобразования символов в числовые (-1213) - PullRequest
1 голос
/ 21 августа 2011

При попытке обновить таблицу Informix через скрипт Python я получаю сообщение об ошибке:

    Character to numeric conversion error (-1213)

Запрос БД:

    cursor.execute("update sales set pid = ? where sid = '1'", price)

Таблица продаж:

    sid | oid | price | pid

В столбце, который я хочу обновить, указан тип данных money (10,2)

Я попытался вставить в качестве десятичного значения строку и число с плавающей запятой ... какой из них будет уместным?

Я использую Informix 10.00 TC6 на Win 2003 Server -

    CLIENT_LOCALE=en_us.819 - DB_LOCALE=en_us.819

Для подключения к Informix я использую pyodbc.

Ничего не говорится о деньгах в поддерживаемых типах данных, поэтому не уверен, работает ли он вообще (http://code.google.com/p/pyodbc/wiki/DataTypes)

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Ваш драйвер БД преобразует ваш код в SQL. Вы можете использовать отладчик Informix, чтобы увидеть, какой SQL он выдает. Я знаю, что Informix не любит тысячи разделителей в своем SQL.

0 голосов
/ 21 августа 2011

Существует два возможных преобразования строки в числовой код в отображаемом SQL.

  1. Преобразование '1' в тот же тип, что и sid.
  2. Преобразование значения, переданного в качестве заполнителя (переменная price, которая подставляется вместо ?).

Какое значение в price? Как Python печатает свое значение как?

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

Итак, другая проблема: что делает PyODBC с price?

Возможно, вы сможете увидеть, что произойдет, если вы установите переменную среды SQLIDEBUG=2:xyz и запустите программу. Он сгенерирует файл с префиксом xyz_, который можно обработать с помощью sqliprint, если он вам доступен. Это скажет вам, что отправляется между клиентом (Python) и сервером данных. В зависимости от того, что вы найдете, он может указывать пальцем на код на стороне клиента или код на стороне сервера.

...