Как я делаю транзакции базы данных с psycopg2/python API дб?

Заметные накладные расходы? Да, но это все меньше и меньше значит в наши дни, так как клиенты и сервера работают намного быстрее.

Вам не нужно делать копии всего, но вам нужно сделать эти файлы доступными через HTTPS. Ваши службы HTTPS и HTTP могут использовать один и тот же корневой каталог документов.

Глупо ли шифровать весь сайт? Типично №

Будут ли пользователи чувствовать себя безопаснее? Возможно.

Действительно ли это делает сайт более безопасным? Только при работе с каналом связи между клиентом и сервером. Все остальное все еще готово.

21
задан Leeeroy 2 August 2009 в 17:26
поделиться

3 ответа

Используйте db.set_isolation_level (n) , предполагая, что db - ваш объект подключения. Как писал Федерико здесь , значение n таково:

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

Как описано здесь , psycopg2.extensions дает вам символические константы для цель:

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
29
ответ дан 29 November 2019 в 20:09
поделиться

Я предпочитаю явно видеть, где находятся мои транзакции:

  • cursor.execute ("BEGIN")
  • cursor. execute ("COMMIT")
6
ответ дан 29 November 2019 в 20:09
поделиться

BEGIN со стандартным API БД Python всегда неявно. Когда вы начинаете работать с базой данных, драйвер выдает BEGIN , а после любого COMMIT или ROLLBACK выдается еще один BEGIN . API базы данных python, совместимый со спецификацией, всегда должен работать таким образом (не только postgresql).

Вы можете изменить эту настройку уровня изоляции на автоматическую фиксацию с помощью db.set_isolation_level (n) , как указано Алексом Мартелли.

Как сказал Тебас, начало неявно, но не выполняется до тех пор, пока не будет выполнен SQL, поэтому, если вы не выполняете ни одного SQL, сеанс не входит в транзакцию.

13
ответ дан 29 November 2019 в 20:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: