Berdasarkan mogrify()
. Anda yang diperbarui output, string dan datetimes Anda tampaknya ditafsirkan dengan benar. E'foo bar'
adalah "konstanta string pelarian" Postgres. Ini memungkinkan Anda mewakili urutan pelarian gaya-C, seperti \t
untuk tab, dalam teks. Juga unknown
Anda lihat di psycopg2.ProgrammingError
tidak ada yang perlu dikhawatirkan, itu adalah perilaku normal. Anda mungkin terlebih dahulu memeriksa apakah jumlah argumen untuk panggilan fungsi Anda sudah benar, dan mungkin mencoba memanggil prosedur dengan param yang ditulis tangan untuk mengidentifikasi param mana yang mungkin menyebabkan masalah:
Prosedur pengujian:
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;
Contoh:
% 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.