【发布时间】:2014-11-12 06:48:30
【问题描述】:
在 PostgreSQL 事务访问模式可以更改为READ ONLY (docs)。在 SQLAlchemy 中,可以更改引擎的隔离级别,但没有为只读访问模式提供参数(docs)。
如何在连接上制作具有READ ONLY访问模式的引擎?
【问题讨论】:
标签: postgresql transactions sqlalchemy readonly
在 PostgreSQL 事务访问模式可以更改为READ ONLY (docs)。在 SQLAlchemy 中,可以更改引擎的隔离级别,但没有为只读访问模式提供参数(docs)。
如何在连接上制作具有READ ONLY访问模式的引擎?
【问题讨论】:
标签: postgresql transactions sqlalchemy readonly
一种解决方案是对每笔交易执行一条语句:
engine = create_engine('postgresql+psycopg2://postgres:pass@127.0.0.1:5432/')
@event.listens_for(engine, 'begin')
def receive_begin(conn):
conn.execute('SET TRANSACTION READ ONLY')
但最好在BEGIN TRANSACTION 行中设置模式而不是单独的语句。
【讨论】:
使用 SQL Alchemy 1.4,可以使用 Connection.execution_options() 设置只读和可延迟模式。
with engine.connect() as conn:
conn = conn.execution_options(
isolation_level="SERIALIZABLE",
postgresql_readonly=True,
postgresql_deferrable=True
)
with conn.begin():
# ... work with transaction
以上是取自https://docs.sqlalchemy.org/en/14/dialects/postgresql.html#postgresql-readonly-deferrable的例子
【讨论】: