sql >> Database teknologi >  >> RDS >> PostgreSQL

python + psycopg2 =ukendte typer?

Baseret på din opdaterede mogrify() output, ser dine strenge og datotider ud til at være korrekt fortolket. E'foo bar' er Postgres' "escape streng konstant". Det lader dig repræsentere C-stil escape-sekvenser, såsom \t for faneblad, i tekst. Også den unknown du ser i psycopg2.ProgrammingError er ikke noget at bekymre sig om, det er normal adfærd. Du kan måske først tjekke, at antallet af argumenter til dit funktionskald er korrekte, og måske prøve at kalde proceduren med en håndskrevne parameter for at identificere, hvilken parameter der kan forårsage et problem:

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;

Eksempel:

% 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. Regulære udtryk _# i slutningen af ​​strengen

  2. Meget simpel brugerinput i django

  3. npm installer oracledb giver fejl:Kan ikke finde $OCI_LIB_DIR/libclntsh.dylib

  4. MySQL:Finder gentagne navne i min brugertabel