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

SQL ottiene i dati da BEGIN; ...; FINE; blocco in Python

Postgresql in realtà non supporta la restituzione di più set di risultati da un singolo comando. Se passi questo input a psql:

BEGIN;
SELECT ...;
END;

dividerà questo lato client ed eseguirà effettivamente tre istruzioni, solo la seconda delle quali restituisce un set di risultati.

"BEGIN" e "END" sono comandi a livello SQL per avviare/terminare una transazione. (Potrebbe esserci un protocollo di livello inferiore per farlo, ma non riesco a ricordare). Probabilmente non vuoi emetterli direttamente, ma piuttosto lasciare che il tuo driver (psycopg2) gestisca questo. Ad esempio, con il DBI di Perl specifico AutoCommit=>0 durante la connessione ed emette implicitamente un "BEGIN" prima del mio primo comando; e poi "END" (o "COMMIT" ecc.) quando chiamo esplicitamente $dbh->commit; Immagino che la DB-API di Python funzioni in questo modo, poiché lo fanno anche altri sistemi come JDBC...