我只有下面的代码库,并且可以手动正常运行。但是当我在jdbc驱动程序中使用它时会抛出异常。
代码:
class NoteRequestViewSet(viewsets.ModelViewSet):
queryset = NoteInfo.objects.all()
serializer_class = NoteInfoSerializer
pagination_class = None
print(queryset)
print(serializer_class)
def list(self, request):
try:
obj = self.get_queryset().get(
Q(refno=pk) | Q(client_id=pk)
)
serializer = self.get_serializer(obj)
return Response(serializer.data)
except Exception as e:
return Response(str(e))
例外:
java.sql.SQLException:子查询在处返回多于1行 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
有线索吗?
答案 0 :(得分:1)
我不知道您的数据或确切的逻辑,但是我建议对子查询而不是WHERE NOT IN
使用<>
逻辑:
DELETE
FROM tests
WHERE
e2e_product_id = 410 AND
test_name = 'PWBAR-FullBalance-Auth-TC1' AND
test_id NOT IN (
SELECT MAX_TEST_ID
FROM (
SELECT MAX(test_id) MAX_TEST_ID
FROM tests
WHERE e2e_product_id = 410
GROUP BY test_name
HAVING COUNT(*) > 1
) t
);
这将绕过子查询返回多个结果错误。通常,您的子查询将为每个测试返回一个最大值。因此,假设您的逻辑是不想让test_id
匹配 any 组,则上述逻辑应该是正确的。
答案 1 :(得分:0)
由于错误肯定表明我们返回的行数是多个,因此您应将test_id <>
更改为test_id not in
,然后将后面的部分放入括号中。