Въз основа на вашия актуализиран mogrify()
изход, вашите низове и дати и часове изглеждат правилно интерпретирани. E'foo bar'
е "константата на изходен низ" на Postgres. Позволява ви да представяте екраниращи последователности в стил C, като \t
за раздел, в текст. Също така unknown
виждате в psycopg2.ProgrammingError
няма за какво да се притеснявате, това е нормално поведение. Може първо да проверите дали броят на аргументите за вашето извикване на функция е правилен и може би да опитате да извикате процедурата с ръчно написани параметри, за да идентифицирате кой параметър може да причинява проблем:
Тестова процедура:
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;
Пример:
% 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.