2016-06-28 5 views
0

Итак, я использую odo для миграции данных, но наткнулся на эту ошибку:Получение «целое число из диапазона» ошибка SQLAlchemy

sqlalchemy.exc.DataError: (psycopg2.DataError) integer out of range 

Оба источника и таблицы назначения имеют ту же схему, но в операторе SQL выполняемые в бэкэнд, целочисленные значения имеют с ними .0. Как целое число 34 в исходной таблице показано, как 34.0:

[SQL: INSERT INTO table2 (col1, col2,col3) VALUES (%(col1)s, %(col2)s, %(col3)s] 
[parameters: ({'col2' : val2', 'col3' : val3', 'col1' : val1})] 

Пожалуйста, дайте мне знать, если требуется дополнительная информация.

+0

Это может быть из-за 'значения NaN' для целочисленного столбца в словаре параметров. Добавлен новый вопрос: http://stackoverflow.com/questions/38074487/copy-empty-string-to-integer-column-postgres – delalli

ответ

0

SQL-строка должна быть:

INSERT INTO table2 (col1, col2, col3) VALUES (
    %(col1)s::numeric::int, 
    %(col2)s::numeric::int, 
    %(col3)s::numeric::int 
) 

Если целевой столбец не обнуляемый и значение источника может быть None затем сливаться его:

coalesce(%(col1)s::numeric::int, 0), 
+0

Строка sql - это то, что odo показывает как результат при возникновении ошибки. Я не могу его изменить. – delalli

+0

Как я могу изменить строку sql, как я могу это сделать? – delalli

+0

@delalli Показать код Python/Odo –