query postgres para mejor examples datos consultar conectar con python database postgresql

postgres - psycopg2 python 3



¿Cómo hago transacciones de base de datos con psycopg2/python db api? (3)

El BEGIN con la API de base de datos estándar de python siempre está implícito. Cuando comienza a trabajar con la base de datos, el controlador emite un BEGIN y después de cualquier COMMIT o ROLLBACK se emite otro BEGIN . Una API de base de datos de Python compatible con la especificación siempre debería funcionar de esta manera (no solo el postgresql).

Puede cambiar esta configuración del nivel de aislamiento a autocommitir con db.set_isolation_level(n) según lo señalado por Alex Martelli.

Como dijo Tebas, el inicio es implícito pero no se ejecuta hasta que se ejecuta un SQL, así que si no ejecuta ningún SQL, la sesión no está en una transacción.

Estoy jugando con psycopg2, y mientras hay un .commit () y .rollback () no hay un .begin () o similar para iniciar una transacción, ¿o eso parece? Esperaría poder hacer

db.begin() # possible even set the isolation level here curs = db.cursor() cursor.execute(''select etc... for update'') ... cursor.execute(''update ... etc.'') db.commit();

Entonces, ¿cómo funcionan las transacciones con psycopg2? ¿Cómo puedo configurar / cambiar el nivel de aislamiento?


Prefiero ver explícitamente dónde están mis transacciones:

  • cursor.execute ("BEGIN")
  • cursor.execute ("COMMIT")

Use db.set_isolation_level(n) , asumiendo que db es su objeto de conexión. Como escribió Federico here , el significado de n es:

0 -> autocommit 1 -> read committed 2 -> serialized (but not officially supported by pg) 3 -> serialized

Como se documenta here , psycopg2.extensions le da constantes simbólicas para el propósito:

Setting transaction isolation levels ==================================== psycopg2 connection objects hold informations about the PostgreSQL `transaction isolation level`_. The current transaction level can be read from the `.isolation_level` attribute. The default isolation level is ``READ COMMITTED``. A different isolation level con be set through the `.set_isolation_level()` method. The level can be set to one of the following constants, defined in `psycopg2.extensions`: `ISOLATION_LEVEL_AUTOCOMMIT` No transaction is started when command are issued and no `.commit()`/`.rollback()` is required. Some PostgreSQL command such as ``CREATE DATABASE`` can''t run into a transaction: to run such command use `.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)`. `ISOLATION_LEVEL_READ_COMMITTED` This is the default value. A new transaction is started at the first `.execute()` command on a cursor and at each new `.execute()` after a `.commit()` or a `.rollback()`. The transaction runs in the PostgreSQL ``READ COMMITTED`` isolation level. `ISOLATION_LEVEL_SERIALIZABLE` Transactions are run at a ``SERIALIZABLE`` isolation level. .. _transaction isolation level: http://www.postgresql.org/docs/8.1/static/transaction-iso.html