Gebaseerd op uw bijgewerkte mogrify()
uitvoer, lijken uw strings en datetimes correct te worden geïnterpreteerd. De E'foo bar'
is de "escape string-constante" van Postgres. Hiermee kunt u escape-reeksen in C-stijl weergeven, zoals \t
voor tabblad, in tekst. Ook de unknown
je ziet in de psycopg2.ProgrammingError
niets om je zorgen over te maken, dat is normaal gedrag. U kunt eerst controleren of het aantal argumenten voor uw functieaanroep correct is, en misschien proberen de procedure aan te roepen met een handgeschreven param om te bepalen welke param een probleem zou kunnen veroorzaken:
Testprocedure:
CREATE OR REPLACE FUNCTION
foo (num INTEGER, name VARCHAR, ts TIMESTAMP)
RETURNS TABLE (num INTEGER, name VARCHAR, ts TIMESTAMP)
AS $$ SELECT $1, $2, $3; $$
LANGUAGE SQL;
Voorbeeld:
% python
>>> import datetime
>>> import psycopg2
>>> conn = psycopg2.connect("user=postgres")
>>> r = conn.cursor()
>>> args = [1, "hello", datetime.datetime.now()]
>>> r.callproc('foo', args)
[1, 'hello', datetime.datetime(2011, 3, 10, 18, 51, 24, 904103)]
>>> r.callproc('fooxyz', args)
psycopg2.ProgrammingError: function fooxyz(integer, unknown, unknown) does not exist
LINE 1: SELECT * FROM fooxyz(1,E'hello','2011-03-10T18:51:24.904103'...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.