PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

python + psycopg2 =неизвестни типове?

Въз основа на вашия актуализиран mogrify() изход, вашите низове и дати и часове изглеждат правилно интерпретирани. E'foo bar' е "константата на изходен низ" на Postgres. Позволява ви да представяте екраниращи последователности в стил C, като \t за раздел, в текст. Също така unknown виждате в psycopg2.ProgrammingError няма за какво да се притеснявате, това е нормално поведение. Може първо да проверите дали броят на аргументите за вашето извикване на функция е правилен и може би да опитате да извикате процедурата с ръчно написани параметри, за да идентифицирате кой параметър може да причинява проблем:

Тестова процедура:

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;

Пример:

% 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. Използване на .pgpass от Apache libphp5.so

  2. QT5:Неуспешно зареждане на psql драйвер в Windows

  3. Не може да се свърже с базата данни на Postgres от контейнера golang Docker

  4. PostgreSQL:Идентифициране на завърнали се посетители въз основа на дата - присъединявания или функции за прозорец?

  5. Ядро на Entity Framework - Съдържа, чувствителен ли е главният или малък регистър?