PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

python + psycopg2 =tipos desconhecidos?


Com base no seu mogrify() atualizado output, suas strings e datas parecem ser interpretadas corretamente. A E'foo bar' é a "constante de string de escape" do Postgres. Ele permite que você represente sequências de escape no estilo C, como \t para tab, em texto. Também o unknown você vê no psycopg2.ProgrammingError não são nada para se preocupar, isso é um comportamento normal. Você pode primeiro verificar se o número de argumentos para sua chamada de função está correto e talvez tentar chamar o procedimento com parâmetros escritos à mão para identificar qual parâmetro pode estar causando um problema:

Procedimento de teste:
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;

Exemplo:
% 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.