DatabaseError: mehr als eine Zeile, die von einer Unterabfrage zurückgegeben wird, die als Ausdruck verwendet wird (Django)

Django durch einen DatabaseError wenn ich versuche, einen zusammengeführten Abfrage-Satz zu verwenden. Mein Code ist

 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) 

Die Fehlermeldung ist

 DatabaseError: more than one row returned by a subquery used as an expression 

Die Methode .latest_vulns ist

 @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) 

Abfrage:

 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 

Es protokolliert sich erfolgreich mehrmals, gibt aber auch einen Fehler in der Logging-Zeile. Kann mir jemand helfen? Danke vielmals.

2 Solutions collect form web for “DatabaseError: mehr als eine Zeile, die von einer Unterabfrage zurückgegeben wird, die als Ausdruck verwendet wird (Django)”

Check Code wie folgt in Ihrem SQL. Sie müssen den IN-Operator verwenden, wenn mehr als ein Ergebnis aus dem verschachtelten SQL geholt werden kann.

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

Das Problem wurde seltsam gelöst. Ich habe Protokollierung in latest_vulns hinzugefügt, um die Abfrage zu bewerten, dann funktioniert alles gut. Es funktioniert auch, nachdem ich die Protokollierung entfernt habe.

  • Verbindung sqlalchemy zu MSAccess
  • Wie benutzt man Pandas, um die Pivot-Tabellenergebnisse pro Woche zu gruppieren?
  • Psycopg2 mag keine Tabellennamen, die mit einem Kleinbuchstaben beginnen
  • Zählen von Beziehungen in SQLAlchemy
  • Wie mache ich einen JOIN in SQLAlchemy auf 3 Tafeln, wo einer von ihnen zwischen anderen zwei Mapping ist?
  • Wie kann man wörtlich basierte Abfrage in sqlalchemy erstellen?
  • Python + sqlite, fügen Sie Daten aus Variablen in die Tabelle ein
  • Python ist langsam, wenn es über eine große Liste iteriert
  • Erzeugen Sie neue Dataframe mit Werten in alten Dataframe als neue Funktionen in Python
  • Verbinden mit Microsoft SQL Server mit Python
  • Cx_Oracle CREATE TABLE AS gibt ORA-01036 zurück: illegaler Variablenname / Nummer
  • Python ist die beste Programmiersprache der Welt.