在PostgreSQL中,transaction访问模式可以更改为READ ONLY(docs)。在SQLAlchemy中,可以更改引擎的隔离级别,但没有为只读访问模式(docs)提供参数。如何在连接上使用READ ONLY访问模式?
READ ONLY
uujelgoq1#
一个解决方案是在每个事务上执行一个语句:
engine = create_engine('postgresql+psycopg2://postgres:[email protected]:5432/') @event.listens_for(engine, 'begin') def receive_begin(conn): conn.execute('SET TRANSACTION READ ONLY')
字符串但最好在BEGIN TRANSACTION行中设置模式,而不是单独的语句。
BEGIN TRANSACTION
wswtfjt72#
使用SQL Alchemy 1.4,可以使用Connection.execution_options()设置只读和可延迟模式。
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的示例
ffdz8vbo3#
使用create_engine()和execution_options()创建引擎很方便,因为它允许创建具有只读访问模式的引擎(这意味着只读应用于该引擎的所有连接):
create_engine()
execution_options()
from sqlalchemy import create_engine engine = (create_engine("postgresql://scott:tiger@localhost:5432/mydatabase") .execution_options(postgresql_readonly=True))
字符串也可能是以下(在文档中找到):
from sqlalchemy import create_engine engine = create_engine("postgresql://scott:tiger@localhost:5432/mydatabase", execution_options={"postgresql_readonly": True})
型
3条答案
按热度按时间uujelgoq1#
一个解决方案是在每个事务上执行一个语句:
字符串
但最好在
BEGIN TRANSACTION
行中设置模式,而不是单独的语句。wswtfjt72#
使用SQL Alchemy 1.4,可以使用
Connection.execution_options()
设置只读和可延迟模式。字符串
以上是一个取自https://docs.sqlalchemy.org/en/14/dialects/postgresql.html#postgresql-readonly-deferrable的示例
ffdz8vbo3#
使用
create_engine()
和execution_options()
创建引擎很方便,因为它允许创建具有只读访问模式的引擎(这意味着只读应用于该引擎的所有连接):字符串
也可能是以下(在文档中找到):
型