Baseret på din opdaterede mogrify()
output, ser dine strenge og datotider ud til at være korrekt fortolket. E'foo bar'
er Postgres' "escape streng konstant". Det lader dig repræsentere C-stil escape-sekvenser, såsom \t
for faneblad, i tekst. Også den unknown
du ser i psycopg2.ProgrammingError
er ikke noget at bekymre sig om, det er normal adfærd. Du kan måske først tjekke, at antallet af argumenter til dit funktionskald er korrekte, og måske prøve at kalde proceduren med en håndskrevne parameter for at identificere, hvilken parameter der kan forårsage et problem:
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;
Eksempel:
% 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.