You know the length of the lines, and by drawing the lines in a Jupyter Notebook, you know that lines 1 and lines 3 intersect. In PostGIS, you can use the ST_Intersects() function, passing either geometries or geographies. The database will return either true or false.
The following code will execute the query on lines 1 and lines 3 and return True:
cu.execute("SELECT ST_Intersects(l.location::geography,ll.location::geometry) FROM lines l, lines ll WHERE l.id=1 AND ll.id=3")cu.fetchall()
The previous code will return True, because lines 1 and lines 3 intersect. But where do they intersect? Using ST_Intersection() will return to the point where the two lines meet:
cu.execute("SELECT ST_AsText(ST_Intersection(l.location::geography, ...