我使用 SQLAlchemy 作为 ORM 创建了一个 Flask 应用程序。我还使用 flask-login 来管理我的不同用户。我想连接到具有不同 Flask 用户的 PostgreSQL 数据库,这些用户对应于具有不同权限的不同 postgres 用户。 他们应该能够同时登录并以各自的权限进行不同的查询。我尝试了 SQLAlchemy 的各种池方法,但无法实现我想要的。它总是导致开放连接与不同用户的任意关联。 做到这一点的最佳方法是什么,即实现这种“会话持久”数据库连接行为?
预先感谢您的帮助!
您可能可以使用
before_cursor_execute
事件在每次事务之前强制执行用户角色。这给数据库增加了额外的事务压力,但允许连接池,而不必为每个单独的用户专用连接线程。
set_local_role = sqlalchemy.sql.text("SET LOCAL ROLE :role_name;")
@sqlalchemy.event.listens_for(DBSession, 'before_cursor_execute')
def switch_to_user(connection, cursor, statement, parameters, context, executemany):
connection.execute(set_local_role, role_name=current_user.username)