sql >> Database >  >> RDS >> PostgreSQL

python + psycopg2 =onbekende typen?

Gebaseerd op uw bijgewerkte mogrify() uitvoer, lijken uw strings en datetimes correct te worden geïnterpreteerd. De E'foo bar' is de "escape string-constante" van Postgres. Hiermee kunt u escape-reeksen in C-stijl weergeven, zoals \t voor tabblad, in tekst. Ook de unknown je ziet in de psycopg2.ProgrammingError niets om je zorgen over te maken, dat is normaal gedrag. U kunt eerst controleren of het aantal argumenten voor uw functieaanroep correct is, en misschien proberen de procedure aan te roepen met een handgeschreven param om te bepalen welke param een ​​probleem zou kunnen veroorzaken:

Testprocedure:

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;

Voorbeeld:

% 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. Vind alle overeenkomsten in een varchar2()

  2. Hoe cx_Oracle op El Capitan te installeren

  3. Fatale fout:oproep naar ongedefinieerde functie mysql_connect_errno() in

  4. Gelijktijdige updates in Oracle:vergrendelen of niet?