Я получаю ошибки, связанные с «numpy.int64», «numpy.bool_» и т.д.¶
Пакет numpy имеет свои собственные числовые типы данных, которые расширяют числовые типы Python, но содержат некоторые поведения, которые в некоторых случаях делают невозможным их согласование с некоторыми поведениями SQLAlchemy, а также в некоторых случаях с поведениями используемого драйвера DBAPI.
Две ошибки, которые могут возникнуть, это ProgrammingError:can'tadapttype'numpy.int64' на бэкенде, таком как psycopg2, и ArgumentError:SQLexpressionobjectexpected,gotobjectoftype<class'numpy.bool_'>instead; в более новых версиях SQLAlchemy это может быть ArgumentError:SQLexpressionforWHERE/HAVINGroleexpected,gotTrue.
В первом случае проблема связана с тем, что в psycopg2 нет соответствующей записи поиска для типа данных int64, поэтому он не принимается непосредственно запросами. Это можно проиллюстрировать на примере следующего кода:
В последнем случае проблема связана с тем, что тип данных numpy.int64 переопределяет метод __eq__() и заставляет возвращать тип выражения numpy.True или numpy.False, что нарушает поведение языка выражений SQLAlchemy, который ожидает возврата выражений ColumnElement от сравнений равенства в Python:
Обе эти ошибки решаются одинаково, то есть специальные типы данных numpy нужно заменить на обычные значения Python. Примеры включают применение функции Python int() к типам numpy.int32 и numpy.int64 и функции Python float() к numpy.float32: