According to the documentation of cx_Oracle, the cursor should be garbage-collected automatically, and there should be no risk of a leak.
However, in my anecdotal experience, if I didn't close the cursor explicitly, the memory usage of the process would grow without bounds -- this might have something to do with my usage of a custom rowfactory, where I had to capture the cursor in a lambda (although, in theory, the GC should be able to handle this case as well).
Since the Cursor class implements the context manager pattern, you can safely and conveniently write:
with connection.cursor() as cursor:
cursor.execute("...")