Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2008 08:53:11

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

Всем доброго! Дабы не начинать новую тему решил оставить свой пост в данной теме. Есть код:

# -*- coding: cp1251 -*-
import sys, time
import sqlite3 as db
ifile = open("invent.txt", 'r')
c = db.connect(database=r"C:\pythonprog\txt\goodsinvent.s3db")
cu = c.cursor()
#cu.execute("DELETE FROM goods")
for line in ifile.readlines():
f = line.split('\t').decode('utf-8')
try:
cu.execute("INSERT INTO goods VALUES (?, ?, ?, ?, ?)", (f[0], f[2], f[3], f[4], f[6]))
except db.DatabaseError, x:
print "Ошибка: ", x
cu.execute("SELECT * FROM goods ORDER BY plu ASC")
c.commit()
c.close()
ifile.close()
Который без строки “cu.execute(”SELECT * FROM goods ORDER BY plu ASC“)” Выполняется нормально, но как только вставляю данную строку выпадает ошибка вида:
Traceback (most recent call last):
File "C:\pythonprog\txt\filesort.py", line 14, in <module>
cu.execute("SELECT * FROM goods ORDER BY plu ASC")
OperationalError: Could not decode to UTF-8 column 'ProdGoup' with text 'Продуктовые товары
Вопрос следующий: “Как этой ошибки избежать”?
Честно говоря не догоняю.



Python 2.7.3
Pyside 1.1.2

Офлайн

#2 Ноя. 28, 2008 16:34:15

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Sqlite3 и русская кодировка букв

Попробуй так:

...
f = line.split('\t') #.decode('utf-8')
...
c.commit()
cu.execute("SELECT * FROM goods ORDER BY plu ASC")
#c.commit()
..bw



Офлайн

#3 Ноя. 29, 2008 07:11:55

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

Спасибо bw, но так не работает. Порылся по иностранным сайтам нашел решение, вот кусок кода

c.commit()
c.text_factory = str
cu.execute("SELECT * FROM goods ORDER BY plu ASC")
Необходимо добавить строку “c.text_factory = str” и все нормально!



Python 2.7.3
Pyside 1.1.2

Офлайн

#4 Фев. 9, 2009 17:47:14

alleo
От:
Зарегистрирован: 2009-02-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

Кстати, чтобы не нужно было перекодировать каждую строчку из файла, можно сделать так:

import codecs

ifile = codecs.open("invent.txt", 'r','cp1251') # указать кодировку файла



Офлайн

#5 Май 23, 2009 20:17:31

jdex
От:
Зарегистрирован: 2009-05-23
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

alleo
import codecs

ifile = codecs.open("invent.txt", 'r','cp1251') # указать кодировку файла
Очень спасибо!!! Помогло! )))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version