PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

python + psycopg2 =nieznane typy?

Na podstawie zaktualizowanej mogrify() wyjście, twoje łańcuchy i daty i godziny wydają się być poprawnie zinterpretowane. E'foo bar' to "stała łańcucha ucieczki" Postgresa. Pozwala reprezentować sekwencje specjalne w stylu C, takie jak \t na karcie, w tekście. Również unknown widzisz w psycopg2.ProgrammingError nie ma się czym martwić, to normalne zachowanie. Możesz najpierw sprawdzić, czy liczba argumentów w wywołaniu funkcji jest poprawna, i być może spróbować wywołać procedurę z ręcznie napisanymi parametrami, aby określić, który parametr może powodować problem:

Procedura testowa:

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;

Przykład:

% 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Test jednostkowy Django nie powiódł się dla wielu schematów Postgres

  2. Błąd zakleszczenia w instrukcji INSERT

  3. Utwórz dynamiczną tabelę z funkcji w PostgreSQL

  4. Zakres Rails - gdzie w dokładnych dopasowaniach

  5. Podkreślenia lub camelCase w identyfikatorach PostgreSQL, gdy język programowania używa camelCase?