sqlalchemy管理过滤

yvgpqqbh  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(374)

我试图尽可能简单地维护代码,但遇到了下一个问题:
首先,我们有几个用户,每个用户在数据库中都有自己的记录,其中有他的id字段。但是当管理员进行查询时,我需要向他显示所有用户的所有记录。
我只想弄清楚是否可以构建一个decorator,它将在查询中放置?-sign或*-sign而不是user\u id,或者以显示所有记录的方式修改查询。

  1. user_id = get_user_id_function()
  2. query_result = session.query(Client).filter(operator == user_id).all()

但问题是,如果我把“?”或“*”-查询不会显示所有记录。。。我不想求助于

  1. if Admin:
  2. run this special query
  3. else:
  4. run regular one

我的挑战可以实现吗?

brc7rcf0

brc7rcf01#

这是一种妥协。您只需有条件地包含非管理员的筛选器,而不是将查询写入两次。

  1. # Psuedo code
  2. admin_user_id = get_admin_user_id_function()
  3. user_id = get_user_id_function()
  4. client_query = session.query(Client)
  5. if user_id != admin_user_id:
  6. client_query = client_query.filter(operator == user_id)
  7. query_result = client_query.all()

由于需要更多的过滤器,您可以这样做:

  1. # Psuedo code
  2. admin_user_id = get_admin_user_id_function()
  3. user_id = get_user_id_function()
  4. filter_args = []
  5. if user_id != admin_user_id:
  6. filter_args.append(operator == user_id)
  7. # conditionally include more filters here
  8. # ...
  9. query_result = session.query(Client).filter(*filter_args).all()
展开查看全部

相关问题