У меня есть таблица базы данных с почти 1 миллионом записей. Я добавил новый столбец под названием concentration
. Затем у меня есть функция, которая вычисляет «концентрацию» для каждой записи.
Теперь я хочу обновить записи в пакетном режиме, поэтому я рассмотрел следующие вопросы / ответы: https://stackoverflow.com / a / 33258295/596841, https://stackoverflow.com/a/23324727/596841 и < a href = "https://stackoverflow.com/a/39626473/596841"> https://stackoverflow.com/a/39626473/596841 , но я не уверен, как это сделать с помощью unnest
...
Это моя функция Python 3 для обновлений:
def BatchUpdateWithConcentration(tablename, concentrations):
connection = psycopg2.connect(dbname=database_name, host=host, port=port, user=username, password=password);
cursor = connection.cursor();
sql = """
update #tablename# as t
set
t.concentration = s.con
FROM unnest(%s) s(con, id)
WHERE t.id = s.id;
"""
cursor.execute(sql.replace('#tablename#',tablename.lower()), (concentrations,))
connection.commit()
cursor.close()
connection.close()
concentrations
- это массив кортежей:
[(3.718244705238561e-16, 108264), (...)]
Первое значение - это двойная точность, а второе - целое число, представляющее концентрацию и rowid соответственно.
Я получаю следующее сообщение об ошибке:
psycopg2.ProgrammingError: для функций, возвращающих "запись", требуется список определений столбцов. СТРОКА 5: FROM unnest (ARRAY [(3.718244705238561e-16, 108264), (... ^
1 ответ
Поскольку кортеж Python адаптирован Psycopg к анонимной записи Postgresql, необходимо указать типы данных:
from unnest(%s) s(con numeric, id integer)
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.