Baserat på din uppdaterade mogrify()
output verkar dina strängar och datumtider vara korrekt tolkade. E'foo bar'
är Postgres "flyktsträngskonstant". Den låter dig representera escape-sekvenser i C-stil, som \t
för tab, i text. Även den unknown
du ser i psycopg2.ProgrammingError
är inget att oroa sig för, det är normalt beteende. Du kan först kontrollera att antalet argument till ditt funktionsanrop är korrekt, och kanske prova att anropa proceduren med en handskriven parametrar för att identifiera vilken param som kan orsaka ett problem:
Testprocedur:
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;
Exempel:
% 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.