Is it good practice to prepend every string with u, even if it doesn't contain any characters outside of the ASCII range?
Yes, and also use an editor which works with unicode, and declare the encoding type at the top of each file.
In general, your pattern should be: read bytes, work internally with unicode, output bytes.
When dealing with sqlite3, will a parameterized query automatically encode unicode as utf-8, or does that need to be done manually?
Better to be safe than sorry, but in general I recommend that you test this out yourself.
When dealing with a 'string' of bytes, should this be left as a string object or decoded into a unicode string? (I believe this would throw an exception in most cases )
Yes, work internally with unicode. No, this won't throw an exception if you actually know the encoding. You should know the encoding. Make sure you know the encoding.
If for any reason I need to use a literal unicode character in the code, can I just use that character in a string as long as it is a unicode string and I have my encoding declared at the top of the file?
Yes, as long as your editor is unicode friendly.