PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

python + psycopg2 =tipe yang tidak diketahui?

Berdasarkan mogrify() . Anda yang diperbarui output, string dan datetimes Anda tampaknya ditafsirkan dengan benar. E'foo bar' adalah "konstanta string pelarian" Postgres. Ini memungkinkan Anda mewakili urutan pelarian gaya-C, seperti \t untuk tab, dalam teks. Juga unknown Anda lihat di psycopg2.ProgrammingError tidak ada yang perlu dikhawatirkan, itu adalah perilaku normal. Anda mungkin terlebih dahulu memeriksa apakah jumlah argumen untuk panggilan fungsi Anda sudah benar, dan mungkin mencoba memanggil prosedur dengan param yang ditulis tangan untuk mengidentifikasi param mana yang mungkin menyebabkan masalah:

Prosedur pengujian:

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;

Contoh:

% 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. Menggunakan ADO di VBA untuk terhubung ke PostgreSQL

  2. Terkadang kesalahan Postgres di Heroku:tidak dapat menerjemahkan nama host <pg URL> ke alamat:Nama atau layanan tidak diketahui (PG::Error)

  3. Melewati nama tabel sebagai parameter di psycopg2

  4. Agregat PostgreSQL khusus untuk rata-rata melingkar

  5. Memasukkan NEW.* dari pemicu generik menggunakan EXECUTE di PL/pgsql