sqlalchemy管理过滤

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

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

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

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

if Admin:
    run this special query
else:
    run regular one

我的挑战可以实现吗?

brc7rcf0

brc7rcf01#

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


# Psuedo code

admin_user_id = get_admin_user_id_function()
user_id = get_user_id_function()
client_query = session.query(Client)
if user_id != admin_user_id:
    client_query = client_query.filter(operator == user_id)
query_result = client_query.all()

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


# Psuedo code

admin_user_id = get_admin_user_id_function()
user_id = get_user_id_function()
filter_args = []
if user_id != admin_user_id:
    filter_args.append(operator == user_id)

# conditionally include more filters here

# ...

query_result = session.query(Client).filter(*filter_args).all()

相关问题