Ich versuche, einen serverseitigen Cursor in psycop2 zu verwenden, wie in this blog post beschrieben. Im Wesentlichen wird dies erreicht mitWie kann ich serverseitige Cursor mit Django und Psycopg2 verwenden?
from django.db import connection
if connection.connection is None:
cursor = connection.cursor()
# This is required to populate the connection object properly
cursor = connection.connection.cursor(name='gigantic_cursor')
Wenn ich die Abfrage ausführen:
cursor.execute('SELECT * FROM %s WHERE foreign_id=%s' % (table_name, id))
ich ein ProgrammingError
:
psycopg2.ProgrammingError: can't use a named cursor outside of transactions
Ich habe ganz naiv versucht, eine erstellen Transaktion mit
cursor.execute('BEGIN')
vor der Ausführung der SELECT
Anweisung. Dies führt jedoch zu demselben Fehler, der von der Zeile cursor.execute('BEGIN')
generiert wird.
Ich habe auch versucht
cursor.execute('OPEN gigantic_cursor FOR SELECT * FROM %s WHERE foreign_id=%s' % (table_name, id))
verwenden, aber ich die gleichen Ergebnisse erhalten.
Wie mache ich eine Transaktion in Django?
Aus der Fehlermeldung scheint es, dass sich der Cursor außerhalb von Transaktionen befindet . Versuchen Sie, Cursor innerhalb von Transaktionen zu verwenden. –