sql >> Databasteknik >  >> RDS >> PostgreSQL

python + psycopg2 =okända typer?

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.



  1. Oracle APEX - SQL - Skapa en sekventiell historik och beräkna dagar mellan varje fas

  2. Hur får man information om en användardefinierad typ?

  3. MySQL-uppdateringssatsen matchar endast den första raden

  4. Hur visar man funktionen, proceduren, utlöser källkoden i postgresql?