【问题标题】:How to use READ ONLY transaction mode in SQLAlchemy?如何在 SQLAlchemy 中使用 READ ONLY 事务模式?
【发布时间】:2014-11-12 06:48:30
【问题描述】:

在 PostgreSQL 事务访问模式可以更改为READ ONLY (docs)。在 SQLAlchemy 中,可以更改引擎的隔离级别,但没有为只读访问模式提供参数(docs)。

如何在连接上制作具有READ ONLY访问模式的引擎?

【问题讨论】:

    标签: postgresql transactions sqlalchemy readonly


    【解决方案1】:

    一种解决方案是对每笔交易执行一条语句:

    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 行中设置模式而不是单独的语句。

    【讨论】:

      【解决方案2】:

      使用 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的例子

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-24
        • 1970-01-01
        • 2019-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-02
        相关资源
        最近更新 更多