Я знаю, что подобные перестановки этого вопроса задавались ранее, но ответы, похоже, не проливают свет на то, что я здесь делаю неправильно.
Я пытаюсь вставить эту строку: (Pdb)строка печати ['886', '39', '83474', '0', '0', '0', '0', '0', '1.00', 'D', '20070813', 'R', 'C', 'B', 'SOCK 4PK', '\ xe9 \ x9e \ x8b \ xe5 \ xad \ x90 \ xe5 \ xb0 \ xba \ xe5 \ xaf \ xb86-9.5 / 24-27.5CM', 'PR']
в эту таблицу: CREATE TABLE item ("whs" int, "dept" int, "item" int, "dsun" int, "oh" int, "ohrtv" int, "adjp" int, "adjn" int, "sell" текст, "stat" текст, "lsldt" int, текст "cat1", текст "cat2", текст "cat3", текст "des1", текст "sgn3", текст "unit");
Кажется, что столбец sgn3 вызывает проблемы.Он определен как TEXT, а данные для вставки - utf-8.Почему я получаю ошибку sqlite3?
ProgrammingError: «Вы не должны использовать 8-битные строки байтов, если вы не используете text_factory, который может интерпретировать 8-битный bytestr ... = str).Настоятельно рекомендуется вместо этого просто переключить свое приложение на строки Unicode. '
Вот код, выполняющий вставку:
query = 'insert into %s values(%s)' % (
self.tablename,
','.join(['?' for field in row])
)
self.con.execute(query, row)
А вот процедура, которая создает генератор записейбыть вставленным:
def encode_utf_8(self, csv_data, csv_encoding):
"""Decodes from 'csv_encoding' and encodes to utf-8.
Accepts any open csv file encoding using any scheme recognized by
python. Returns a generator.
"""
for line in csv_data:
try:
yield line.decode(csv_encoding).encode('utf-8')
except UnicodeDecodeError:
next