Is a database handle you can write to not ... basically mutable state, the arch-nemesis of functional languages?
Access to an external database is a kind of effect. In functional terms, you'd use a monad to represent this, though in Koka you'd define an effect for it. In either case, it becomes part of the function signature.
A "pure" function could instead work around it by returning (without executing) a query, accepting a state and returning a new, modified state, or otherwise returning some kind of commands to the caller without directly querying the database.