DatabaseError: более чем одна строка, возвращаемая подзапросом, используемым как выражение (Django)

Django через DatabaseError когда я пытаюсь использовать объединенный набор запросов. Мой код

 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) 

Сообщение об ошибке

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

Метод .latest_vulns –

 @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 

Он успешно регистрируется несколько раз, но также дает ошибку также в строке ведения журнала. Может ли кто-нибудь помочь мне? Большое спасибо.

2 Solutions collect form web for “DatabaseError: более чем одна строка, возвращаемая подзапросом, используемым как выражение (Django)”

Проверьте код, как это в вашем SQL. Вы должны использовать оператор IN, если из вложенного SQL может быть извлечено более одного результата.

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

Проблема была решена странно. Я добавил logging in latest_vulns чтобы оценить набор запросов, тогда все работает нормально. Он работает даже после того, как я удалил журнал.

  • Панды оставили внешнее соединение нескольких кадров данных на нескольких столбцах
  • Как добавить «3 месяца» к объекту datetime.date в python?
  • Как использовать сложные SQL-скрипты с python
  • SQLAlchemy commals делает float округленным
  • Модели Django - SELECT DISTINCT (foo) Из таблицы слишком медленно
  • Django: как создать таблицу лидеров
  • Как синхронизировать базы данных MySQL между двумя удаленными базами данных (без технологии репликации базы данных MySQL)
  • Как кэшировать вызовы alchemy sql с Flask-cache и redis?
  • Python - лучший язык программирования в мире.