Flask SQLAlchemy:filter_by() 采用 1 个位置参数,但给出了 2 个

2 python postgresql sqlalchemy flask

我的 python api 中有以下几行,它根据请求从 postgres db 中删除用户创建的函数。

@func_app.route("/delete", methods=["POST"])

def delete_func():
    try:
         JSON = request.get_json()

         user_func = function_table.query.filter_by( 
         created_by=token_payload["email"], functionid=JSON["funcId"]
         ).all()
         functionid=JSON["funcId"]
         func_detail = function_table.query.filter_by(functionid).first()


         user = users_table.query.filter_by(email=token_payload["username"]).first()

         if len(user_func) == 0:
             log_metric(g.request_id + " " + "No functions found")
             return make_response(
               jsonify("User does not have any functions. Please try again later."),
              204,
               )
        else:
            function_table.query.filter_by(functionid).delete()
            db.session.commit()


   except Exception as err:
        db.session.rollback()
        log_metric(g.request_id + " " + str(err))
        return make_response(
            jsonify(
                "Unable to process your request at the moment. Please try again later."
             ),
           400,
            )
    finally:
         db.session.close()
Run Code Online (Sandbox Code Playgroud)

我之前也类似地使用过filter_by,但没有发现任何问题。谁能帮我弄清楚出了什么问题吗?谢谢!

tem*_*mmo 6

您需要使用 filter_by 中的值定义列名,它采用**kwargs参数而不是*args输入类型。

你需要改变

func_detail = function_table.query.filter_by(functionid).first()
Run Code Online (Sandbox Code Playgroud)

func_detail = function_table.query.filter_by(id = functionid).first()
Run Code Online (Sandbox Code Playgroud)

考虑的id是列名称。

有关详细信息,请参阅sqlalchemy 文档