DatabaseError:用作表达式的子查询返回多行(Django)

2024-06-26 02:04:57 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试使用合并查询集时,通过DatabaseError进行Django。我的代码是

assetsNetwork = Asset.objects.filter(client=myClient, module__label__in=network_label_list)
vulnsNetworkRaw = Vuln.objects.none()
for asset in assetsNetwork:
    vulnsNetworkRaw = vulnsNetworkRaw | asset.latest_vulns
    logging.debug("+++%s+++"%vulnsNetworkRaw)

错误消息是

^{pr2}$

最新的方法是

@property
def latest_scan(self):
    from arachni.models import WebScan, Vulns as WebVuln
    my_module = self.module

    try:
        return Scan.objects.filter(assets__id=self.id, status='Audit Complete').latest('completed_Date')
    except:
        return Scan.objects.none()
@property
def latest_vulns(self):
    from arachni.models import WebScan, Vulns as WebVuln
    latest_scan = self.latest_scan
    return Vuln.objects.filter(scan=latest_scan, host=self.IP_Address)

查询:

2012-08-07 16:44:38 EDT STATEMENT:  SELECT "pegasus_vuln"."id", "pegasus_vuln"."nvt_id", "pegasus_vuln"."scan_id", "pegasus_vuln"."host", "pegasus_vuln"."port", "pegasus_vuln"."risk_factor", "pegasus_vuln"."cvss_score", "pegasus_vuln"."status", "pegasus_vuln"."change", "pegasus_vuln"."comment", "pegasus_vuln"."description", "pegasus_vuln"."solution", "pegasus_vuln"."_order" FROM "pegasus_vuln" WHERE (("pegasus_vuln"."host" = '192.168.2.251'  AND "pegasus_vuln"."scan_id" = 95 ) OR ("pegasus_vuln"."host" = '192.168.2.5'  AND "pegasus_vuln"."scan_id" =  (SELECT U0."id" FROM "pegasus_scan" U0)) OR ("pegasus_vuln"."host" = '10.1.10.244'  AND "pegasus_vuln"."scan_id" = 109 ) OR ("pegasus_vuln"."host" = '192.168.2.5'  AND "pegasus_vuln"."scan_id" =  (SELECT U0."id" FROM "pegasus_scan" U0)) OR ("pegasus_vuln"."host" = '192.168.2.248'  AND "pegasus_vuln"."scan_id" =  (SELECT U0."id" FROM "pegasus_scan" U0))) ORDER BY "pegasus_vuln"."_order" ASC LIMIT 21
2012-08-07 16:44:38 EDT ERROR:  more than one row returned by a subquery used as an expression

它成功地记录了几次日志,但在日志记录行中也给出了一个错误。有人能帮我吗?谢谢。在


Tags: orandfromselfidhostscanobjects
2条回答

在SQL中检查类似这样的代码。如果可以从嵌套SQL获取多个结果,则需要使用IN运算符。在

"pegasus_vuln"."scan_id" =  (SELECT U0."id" FROM "pegasus_scan" U0))

这个问题被奇怪地解决了。我在latest_vulns中添加了日志记录来评估查询集,然后一切正常。即使我删除了日志,它也能工作。在

相关问题 更多 >