0
点赞
收藏
分享

微信扫一扫

OpenCV 图像重映射函数remap()实例详解

JakietYu 03-17 10:30 阅读 3
pythonsql

        首先谈谈应用场景吧,前提是针对查询接口做接口自动化,接口校验的脚本中,一般以响应报文作为预期值,通过sql查出的数据库值作为实际值,二者对比通过则认为接口输出正确。而sql从何而来呢,对于查询接口一般是通过入参作为筛选条件+程序内部逻辑共同决定了我们脚本中查询sql该怎么写。下面将举例工作中遇到的几种场景,带入比较简单粗暴的场景,不一定形象,主打一个意会~。>.<

        假设有一个水果店水果统计的查询接口,它的入参有店名、水果名称、进货日期,店名必填,后两者如果传则作为筛选条件,不传则全量查。那分析下来可能就存在四种情况:

1.店名='水果店' 
2.店名='水果店' and 水果名称='西瓜'
3.店名='水果店' and 进货日期='20240316'
4.店名='水果店' and 水果名称='西瓜' and 进货日期='20240316'

        这时候就到了我之前疑问的地方,这么多场景,我要怎么决定我的sql怎么写呢?首先可以明确的,肯定是要根据入参是否传,来决定sql中要不要筛选,那么就有了下面的实现方式:

def sgdDemo(reqmsg, resmsg,):
    #重点关注where后面查询条件的处理,对于与整个sql拼接的部分,后面有时间再写啦~
    ser = []
    if(reqmsg["店名"]) != "":
        sql = "店名='" + reqmsg["店名"]+"'"
        ser.append(sql)
    if(reqmsg["水果名称"]) != "":
        sql = "水果名称='" + reqmsg["水果名称"]+"'"
        ser.append(sql)
    if(reqmsg["进货日期"]) != "":   
        sql= "进货日期='" + reqmsg["进货日期"]+"'"
        ser.append(sql)
    ret = ' and '.join(ser)
    return ret

if __name__ == '__main__':
    ret1 = sgdDemo({"店名":"水果店","水果名称":"","进货日期":""},"")
    ret2 = sgdDemo({"店名":"水果店","水果名称":"西瓜","进货日期":""},"")
    ret3 = sgdDemo({"店名":"水果店","水果名称":"","进货日期":"20240316"},"")
    ret4 = sgdDemo({"店名":"水果店","水果名称":"西瓜","进货日期":"20240316"},"")
    print(ret1)
    print(ret2)
    print(ret3)
    print(ret4)

运行效果如下:

        问题看似好像解决了,那么又引入了新的问题,示例只有3个入参,如果入参扩大到成百上千个,那还要写几百几千个if来一一判断吗,好像不太现实呢,效率也很低。这个时候就考虑引入for循环,一旦发现为空则跳出循环,否则进行赋值处理

def sgdDemo2(reqmsg, resmsg):
    ser = []
    for i in reqmsg:
        if(reqmsg[i] != ""):
            sql = i + "='" +reqmsg[i]+"'"
            ser.append(sql)
    ret = ' and '.join(ser)
    return ret

if __name__ == '__main__':
    ret1 = sgdDemo2({"店名": "水果店", "水果名称": "", "进货日期": ""}, "")
    ret2 = sgdDemo2({"店名": "水果店", "水果名称": "西瓜", "进货日期": ""}, "")
    ret3 = sgdDemo2({"店名": "水果店", "水果名称": "", "进货日期": "20240316"}, "")
    ret4 = sgdDemo2({"店名": "水果店", "水果名称": "西瓜", "进货日期": "20240316"}, "")
    ret5 = sgdDemo2({"店名": "水果店", "水果名称": "西瓜", "进货日期": "20240316","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12",}, "")
    print(ret1)
    print(ret2)
    print(ret3)
    print(ret4)
    print(ret5)

        这么看好像是精简了一些,但是又提出疑问了,如果入参字段值并不是完全对应数据库字段值呢,假设有一个字段temp,它的值大于1则在数据库中存储A,否则存储为B,那么就需要加上if条件来特殊处理。

        其他场景也是类似的,例如字段对应数据库字段的第N位,那就可以使用substr来实现等等。

        哦吼,遗漏了一个重要的点,其实接口报文的字段,大多与数据库表字段不是一样的,在拼接sql前,需要提前做好字段的映射,从而保证字段能够一一对应,分享到这里就结束啦~~

举报

相关推荐

Linux重映射外设设备名

0 条评论