diff --git a/arkindex_worker/cache.py b/arkindex_worker/cache.py
index 78b2131d533ece8ed8b8be3b3525c7b492923638..ed56e86c5974fc7b1d4bd79522a794c6cc6f0d7b 100644
--- a/arkindex_worker/cache.py
+++ b/arkindex_worker/cache.py
@@ -42,6 +42,12 @@ class LocalDB(object):
         )
         self.db.commit()
 
-    def fetch(self, table, where_clause=""):
-        self.cursor.execute(f"SELECT * FROM {table} {where_clause}")
+    def fetch(self, table, where=[]):
+        sql = f"SELECT * FROM {table}"
+        if where:
+            sql += " WHERE "
+            sql += " AND ".join(
+                [f"{field} {operator} (?)" for field, operator, _ in where]
+            )
+        self.cursor.execute(sql, [value for _, _, value in where])
         return self.cursor.fetchall()
diff --git a/arkindex_worker/worker.py b/arkindex_worker/worker.py
index 1068e684d5c5b46a34fc0266efac108cb95b5437..776b49397f33599f814e67cfde4ce976ebe0f60b 100644
--- a/arkindex_worker/worker.py
+++ b/arkindex_worker/worker.py
@@ -896,17 +896,19 @@ class ElementsWorker(BaseWorker):
                 "type",
                 "worker_version",
             }, "When using the local cache, you can only filter by 'name', 'type' and/or 'worker_version'"
-            parent_id_hex = convert_str_uuid_to_hex(element.id)
-            name_condition = f" AND name LIKE '%{name}%'" if name else ""
-            type_condition = f" AND type='{type}'" if type else ""
-            worker_version_condition = (
-                f" AND worker_version_id='{convert_str_uuid_to_hex(worker_version)}'"
+
+            conditions = [("parent_id", "=", convert_str_uuid_to_hex(element.id))]
+            conditions += [("name", "LIKE", f"%{name}%")] if name else []
+            conditions += [("type", "=", type)] if type else []
+            conditions += (
+                [("worker_version_id", "=", convert_str_uuid_to_hex(worker_version))]
                 if worker_version
-                else ""
+                else []
             )
+
             children = self.cache.fetch(
                 "elements",
-                where_clause=f"WHERE parent_id='{parent_id_hex}'{name_condition}{type_condition}{worker_version_condition}",
+                where=conditions,
             )
             children = [CachedElement(**dict(child)) for child in children]
         else:
diff --git a/tests/test_cache.py b/tests/test_cache.py
index 763046535b78b2cece1903827822c68bae63933b..685cc1b3231b984f20985c360a7fbf6a4169dafc 100644
--- a/tests/test_cache.py
+++ b/tests/test_cache.py
@@ -144,6 +144,13 @@ def test_fetch_with_where():
     cache.create_tables()
     rows = cache.fetch(
         "elements",
-        where_clause=f"WHERE parent_id='{convert_str_uuid_to_hex('12341234-1234-1234-1234-123412341234')}' AND name LIKE '%0%'",
+        where=[
+            (
+                "parent_id",
+                "=",
+                convert_str_uuid_to_hex("12341234-1234-1234-1234-123412341234"),
+            ),
+            ("name", "LIKE", "%0%"),
+        ],
     )
     assert [CachedElement(**dict(row)) for row in rows] == [ELEMENTS_TO_INSERT[0]]