¿Insertando unicode en sqlite?

Todavía estoy aprendiendo Python y como un pequeño proyecto escribí un script que tomaría los valores que tengo en un archivo de texto y los insertaría en una base de datos sqlite3. Pero algunos de los nombres tienen letras extrañas (supongo que los llamaría no ASCII) y generan un error cuando aparecen. Aquí está mi pequeño script (y, por favor, dime si existe de alguna manera podría ser más Pythonic): importar sqlite3

f = open('complete', 'r') fList = f.readlines() conn = sqlite3.connect('tpb') cur = conn.cursor() for i in fList: exploaded = i.split('|') eList = ( (exploaded[1], exploaded[5]) ) cur.execute('INSERT INTO magnets VALUES(?, ?)', eList) conn.commit() cur.close() 

Y genera este error:

 Traceback (most recent call last): File "C:\Users\Admin\Desktop\sortinghat.py", line 13, in  cur.execute('INSERT INTO magnets VALUES(?, ?)', eList) sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a te xt_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode str ings. 

Para obtener el contenido del archivo en Unicode, debe decodificar en función de la encoding en la que se encuentre.
Parece que estás en Windows, así que una buena apuesta es cp1252 .
Si obtuviste el archivo de algún otro lugar, todas las apuestas están desactivadas.

Una vez que tenga la encoding ordenada, una forma fácil de decodificar es usar el módulo de codecs , por ejemplo:

 import codecs # ... with codecs.open('complete', encoding='cp1252') as fin: # or utf-8 or whatever for line in fin: to_insert = (line.split('|')[1], line.split('|')[5]) cur.execute('INSERT INTO magnets VALUES (?,?)', to_insert) conn.commit() # ...