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.

  • Lesen und Schreiben der Zugangsdatenbank in Python
  • Verbinden mit Microsoft SQL Server mit Python
  • Lesen Sie bestimmte Spalten in csv mit Python
  • Das Speichern eines langen HTML-Strings in der SQLite-Datenbank führt zu einem unbekannten Fehler
  • Django: Paginator + raw SQL Abfrage
  • Führen Sie .sql-Dateien aus, die zum Ausführen von SQL Management Studio in python verwendet werden
  • Binärdatei in SQLite-Datenbank mit Python einfügen
  • Formatierung in pymysql multiline statement
  • Sqlalchemy erstellen Tabellen
  • Verwenden von DATEADD in sqlalchemy
  • Django select_related in Vorlage
  • Python ist die beste Programmiersprache der Welt.