Cant delete queryset (django action) with search filds
zN3utr4l opened this issue · 2 comments
djongo: 1.3.6
django: 3.2.15
pymongo: 3.12.3
sqlparse: 0.2.4
If I search for a pattern in the search field and then use django's delete many this is the error.
It appears that all fields in the instance that need to be deleted are replaced by the search: '%Measure.%'
ERROR:
The above exception ( Keyword: None Sub SQL: None FAILED SQL: DELETE FROM "Variables" WHERE "Variables"."_id" IN (SELECT U0."_id" FROM "Variables" U0 INNER JOIN "Groups" U1 ON (U0."IdGroup" = U1."_id") INNER JOIN "Devices" U2 ON (U0."IdLine" = U2."IdLine") WHERE ((U0."ItemId" iLIKE %(0)s OR U0."Type" iLIKE %(1)s OR U1."Name" iLIKE %(2)s OR U1."Description" iLIKE %(3)s OR U1."Type" iLIKE %(4)s OR U2."DeviceName" iLIKE %(5)s OR U0."IdLine" iLIKE %(6)s) AND U0."_id" IN (%(7)s, %(8)s))) Params: ('%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', ObjectId('631f0349cf7f2f3465c07322'), ObjectId('631f0348cf7f2f3465c07321')) Version: 1.3.6) was the direct cause of the following exception:
Full Stack Trace:
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 857, in parse
return handler(self, statement)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 924, in _delete
query.execute()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 759, in execute
self.result = db_con[self.left_table].delete_many(**self.kw)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1292, in delete_many
self._delete_retryable(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1206, in _delete_retryable
return self.__database.client._retryable_write(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\mongo_client.py", line 1552, in _retryable_write
return self._retry_with_session(retryable, func, s, None)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\mongo_client.py", line 1438, in _retry_with_session
return self._retry_internal(retryable, func, session, bulk)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\mongo_client.py", line 1470, in _retry_internal
return func(session, sock_info, retryable)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1200, in _delete
return self._delete(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1191, in _delete
_check_write_command_response(result)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\helpers.py", line 241, in _check_write_command_response
_raise_last_write_error(write_errors)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\helpers.py", line 211, in _raise_last_write_error
raise WriteError(error.get("errmsg"), error.get("code"), error)
pymongo.errors.WriteError: $in requires an array as a second argument, found: missing, full error: {'index': 0, 'code': 40081, 'errmsg': '$in requires an array as a second argument, found: missing'}
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\cursor.py", line 51, in execute
self.result = Query(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 784, in __init__
self._query = self.parse()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 869, in parse
raise exe from e
djongo.exceptions.SQLDecodeError:
Keyword: None
Sub SQL: None
FAILED SQL: DELETE FROM "Variables" WHERE "Variables"."_id" IN (SELECT U0."_id" FROM "Variables" U0 INNER JOIN "Groups" U1 ON (U0."IdGroup" = U1."_id") INNER JOIN "Devices" U2 ON (U0."IdLine" = U2."IdLine") WHERE ((U0."ItemId" iLIKE %(0)s OR U0."Type" iLIKE %(1)s OR U1."Name" iLIKE %(2)s OR U1."Description" iLIKE %(3)s OR U1."Type" iLIKE %(4)s OR U2."DeviceName" iLIKE %(5)s OR U0."IdLine" iLIKE %(6)s) AND U0."_id" IN (%(7)s, %(8)s)))
Params: ('%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', ObjectId('631f0349cf7f2f3465c07322'), ObjectId('631f0348cf7f2f3465c07321'))
Version: 1.3.6
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\cursor.py", line 59, in execute
raise db_exe from e
djongo.database.DatabaseError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\options.py", line 616, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\sites.py", line 232, in inner
return view(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\options.py", line 1739, in changelist_view
response = self.response_action(request, queryset=cl.get_queryset(request))
File "D:\Analisys Detection\Costal.DataAnalyser\Analyser\collector\admin.py", line 31, in response_action
return super().response_action(request, queryset)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\options.py", line 1408, in response_action
response = func(self, request, queryset)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\actions.py", line 45, in delete_selected
modeladmin.delete_queryset(request, queryset)
File "D:\Analisys Detection\Costal.DataAnalyser\Analyser\model_tracker\model_tracker\trackers\admin\model_tracker_admin.py", line 20, in delete_queryset
queryset.delete()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\query.py", line 746, in delete
deleted, _rows_count = collector.delete()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\deletion.py", line 410, in delete
count = qs._raw_delete(using=self.using)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\query.py", line 762, in _raw_delete
cursor = query.get_compiler(using).execute_sql(CURSOR)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\sql\compiler.py", line 1175, in execute_sql
cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 230, in execute
return self._record(self.cursor.execute, sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 154, in _record
return method(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 98, in execute
return super().execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\cursor.py", line 59, in execute
raise db_exe from e
django.db.utils.DatabaseError
Internal Server Error: /admin/collector/variable/
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 857, in parse
return handler(self, statement)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 924, in _delete
query.execute()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 759, in execute
self.result = db_con[self.left_table].delete_many(**self.kw)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1292, in delete_many
self._delete_retryable(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1206, in _delete_retryable
return self.__database.client._retryable_write(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\mongo_client.py", line 1552, in _retryable_write
return self._retry_with_session(retryable, func, s, None)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\mongo_client.py", line 1438, in _retry_with_session
return self._retry_internal(retryable, func, session, bulk)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\mongo_client.py", line 1470, in _retry_internal
return func(session, sock_info, retryable)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1200, in _delete
return self._delete(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\collection.py", line 1191, in _delete
_check_write_command_response(result)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\helpers.py", line 241, in _check_write_command_response
_raise_last_write_error(write_errors)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\pymongo\helpers.py", line 211, in _raise_last_write_error
raise WriteError(error.get("errmsg"), error.get("code"), error)
pymongo.errors.WriteError: $in requires an array as a second argument, found: missing, full error: {'index': 0, 'code': 40081, 'errmsg': '$in requires an array as a second argument, found: missing'}
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\cursor.py", line 51, in execute
self.result = Query(
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 784, in __init__
self._query = self.parse()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\sql2mongo\query.py", line 869, in parse
raise exe from e
djongo.exceptions.SQLDecodeError:
Keyword: None
Sub SQL: None
FAILED SQL: DELETE FROM "Variables" WHERE "Variables"."_id" IN (SELECT U0."_id" FROM "Variables" U0 INNER JOIN "Groups" U1 ON (U0."IdGroup" = U1."_id") INNER JOIN "Devices" U2 ON (U0."IdLine" = U2."IdLine") WHERE ((U0."ItemId" iLIKE %(0)s OR U0."Type" iLIKE %(1)s OR U1."Name" iLIKE %(2)s OR U1."Description" iLIKE %(3)s OR U1."Type" iLIKE %(4)s OR U2."DeviceName" iLIKE %(5)s OR U0."IdLine" iLIKE %(6)s) AND U0."_id" IN (%(7)s, %(8)s)))
Params: ('%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', '%Measure.%', ObjectId('631f0349cf7f2f3465c07322'), ObjectId('631f0348cf7f2f3465c07321'))
Version: 1.3.6
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\cursor.py", line 59, in execute
raise db_exe from e
djongo.database.DatabaseError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\options.py", line 616, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\sites.py", line 232, in inner
return view(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\options.py", line 1739, in changelist_view
response = self.response_action(request, queryset=cl.get_queryset(request))
File "D:\Analisys Detection\Costal.DataAnalyser\Analyser\collector\admin.py", line 31, in response_action
return super().response_action(request, queryset)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\options.py", line 1408, in response_action
response = func(self, request, queryset)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\contrib\admin\actions.py", line 45, in delete_selected
modeladmin.delete_queryset(request, queryset)
File "D:\Analisys Detection\Costal.DataAnalyser\Analyser\model_tracker\model_tracker\trackers\admin\model_tracker_admin.py", line 20, in delete_queryset
queryset.delete()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\query.py", line 746, in delete
deleted, _rows_count = collector.delete()
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\deletion.py", line 410, in delete
count = qs._raw_delete(using=self.using)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\query.py", line 762, in _raw_delete
cursor = query.get_compiler(using).execute_sql(CURSOR)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\models\sql\compiler.py", line 1175, in execute_sql
cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 230, in execute
return self._record(self.cursor.execute, sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 154, in _record
return method(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 98, in execute
return super().execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "D:\Users\g.chirico\miniconda3\envs\production_env\lib\site-packages\djongo\cursor.py", line 59, in execute
raise db_exe from e
django.db.utils.DatabaseError
set id field for your model
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
id = models.ObjectIdField(db_column='_id')
i set id like this