         if action == .Insert {
             statements = statements + buildInsert(obj, upsert: isUpsert) + "\n"
         } else {
+
+            // deny an update for a model without a primary key
+            guard let _ = obj.amigoModel.primaryKey.modelValue(obj) else {
+                return
+            }
+
             statements = statements + buildUpdate(obj) + "\n"
         }
+    }
+
+    public func delete<T: AmigoModel>(obj: T){
+        // deny an delete for a model without a primary key
+        guard let _ = obj.amigoModel.primaryKey.modelValue(obj) else {
+            return
+        }
+
+        statements = statements + buildDelete(obj) + "\n"
     }
 
     public func execute(){

            fragments = parts
        }

        var sql = ""
        let escaped = values.queryParams.map(escape)

        escaped.enumerate().forEach{ index, part in
            sql = sql + fragments[index] + part
        }

        sql = sql + fragments.last!
        return sql
    }


            fragments = parts
        }

        let sql = buildSQL(fragments, params: params)
        return sql

    }
