funcursor.execute(query, uName) call to:
funcursor.execute(query, (uName, ))
The second argument in
execute takes a list/tuple of strings, not a string. The above call creates the tuple before passing in the string to
execute, so no error is thrown.
The reason why
execute takes a list/tuple of strings is because it does not know beforehand how many strings it needs in order to satisfy your query.