Произошла ошибка при передаче строкового аргумента в sql-процедуру (postgreSQL) с использованием python psycopg

Я пытаюсь создать SQL-процедуру spAppeUpdatetTimes (), используя SQL, который принимает на входе строковый аргумент элемента UPC. Но не работает корректно. На выходе оказывается, что процедура принимает на входе не сплошную строку, а несколько аргументов. Это связано с тем, что значение UPC элемента разделяется (делится) на отдельные символы. Что мне делать, чтобы избежать этой ошибки?

CREATE OR REPLACE FUNCTION external.spAppeUpdatetTimes(
upc character varying)

  RETURNS void
  LANGUAGE 'sql'

  COST 100
  VOLATILE 
AS $BODY$

    update external."tbProducts" as pu
            set "eBayDiscontinued"= current_timestamp
    from external."tbProducts" as ps 
    where pu."eBayUPC"=upc;
    end;

  $BODY$;

  ALTER FUNCTION external.spappeupdatettimes(character varying)
       OWNER TO postgreadmin;

Вызов процедуры на Python:

 cursor.callproc('external."spAppeUpdatetTimes"', (record[2]))

Таблица, содержащая данные:

CREATE TABLE external."tbProducts"
("UPC" character varying(255) COLLATE pg_catalog."default",
    CONSTRAINT "tbProducts_pkey" PRIMARY KEY ("CWRPartNumber"))

Однако когда я пытаюсь использовать эту функцию, я получаю следующую ошибку:

ProgrammingError('function external.spAppeUpdatetTimes(unknown, 
unknown, unknown, unknown, unknown, unknown) does not exist\nLINE 1: 
SELECT * FROM external."spAppeUpdatetTimes" 
 (\'1\',\'9\',\'3\',\'0\',...\n                      ^\nHINT:  No 
  function matches the given name and argument types. You might need 
  to add explicit type casts.

Проблема решена. При вызове процедуры в коде Python аргументы callproc должны быть кортежем или списком. mysqltutorial.org/calling-mysql-stored-procedures-python

Joe 10.08.2018 13:01

Пожалуйста, ответьте на свой вопрос правильным примером.

Keith John Hutchison 10.08.2018 23:44
cursor.callproc('external."spAppeUpdatetTimes"', (record[2], ))
Joe 11.08.2018 22:27

У вас должна быть кнопка с названием что-то вроде «Ответить на свой вопрос».

Keith John Hutchison 12.08.2018 02:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
126
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте явно присоединить данные.

Что-то типа

cursor.callproc('external."spAppeUpdatetTimes"', ''.join((record[2])))

Задайте тип данных текста в функции, но ничего не изменится.

Joe 10.08.2018 08:33
Ответ принят как подходящий

Проблема решена. При вызове процедуры в коде Python аргументы callproc должны быть кортежем или списком. mysqltutorial.org/calling-mysql-stored-procedures-python.

cursor.callproc('external."spAppeUpdatetTimes"', (record[2], ))

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