This is an example showing how one can generate knots using mathematical formulae with a Python script by sweeping a shape (convex or not) along a curve (closed or not).
The sweep.py script by default generates both an STL set of Borromean rings and an OpenSCAD set. You can edit it to change colors, formulas, etc. Additional examples are also generated, such as screw thread.
The OpenSCAD output is quite a bit better, in that it will still work if your sizes are such that have self-intersections--the STL generator isn't smart enough to do anything about that.