ProgrammingError: оператор не существует: bigint[] = integer[]

Я работаю с пакетом Python 3 и Postgres (https://pypi.org/project/postgres/).

У меня есть таблица, в которой один из столбцов представляет собой массив BIGINT. Когда я пытаюсь работать с этим столбцом (выбрать, вставить и т. д.), используя список чисел Python, я получаю сообщение об ошибке.

Причина ошибки, по-видимому, в том, что psycopg2 адаптирует список к массиву целых чисел, а не к массиву BIGINT. Он предлагает явное приведение типов, но я не смог найти в документации psycopg2, как это сделать. (Ошибка исчезает, когда я передаю список чисел, которые слишком велики, чтобы поместиться в 4 байта, размер INTEGER).

Это код, который я запустил:

db.all("SELECT phase from messages where recipients=%(reps)s", {'reps':[12,34]})

также бывает с:

db.all("SELECT phase from messages where recipients=ARRAY[12, 34]")

И это сообщение об ошибке, которое я получил:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/yoni/.local/lib/python3.6/site-packages/postgres/__init__.py", line 552, in all
    return cursor.all(sql, parameters)
  File "/home/yoni/.local/lib/python3.6/site-packages/postgres/cursors.py", line 145, in all
    self.execute(sql, parameters)
  File "/home/yoni/.local/lib/python3.6/site-packages/psycopg2/extras.py", line 313, in execute
    return super(NamedTupleCursor, self).execute(query, vars)
psycopg2.ProgrammingError: operator does not exist: bigint[] = integer[]
LINE 1: SELECT phase from messages where recepients=ARRAY[12,34]
                                                   ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
0
1 769
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приведите массив к bigint[]:

db.all("SELECT phase from messages where recipients=ARRAY[12, 34]::bigint[]")

Другие вопросы по теме