Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Вопрос по pysqlite


Автор: cherep 18.10.2006, 00:13
Привет!!

Есть вопросик...
Записываю в sqlite базу данных русские данные.

Решил воспользоваться MS Access для просмотра базы. Для этого скачал из инета sqliteodbc.exe - устанавливает в систему odbc дрова, с пом которых аксесс может коннектиться к базе.

Есть некая непонятность с кодировками.

Если делаю так

cursor.executemany("""insert into person (name, nick, age) values (?,?,?)""", WHAT)

где 

WHAT = (
        ("Пуц", "Пуц", 123),
        ("Тыц", "Тыц", 234),
        )

то в аксессе эти записи видны нормально, однако считывание их пайтоном не работает:

cursor.execute("select * from person")

# => pysqlite2.dbapi2.OperationalError: Could not decode to UTF-8 column 'nick' with text 'Пуц'

Если делать с

WHAT = (
        (u"Пуц", u"Пуц", 123),
        (u"Тыц", u"Тыц", 234),
        )

то питон работает прекрасно, но в аксессе русские слова отображаются кракозябрами...

Охота добиться, чтоб работало и то и то, чтоб из Аксеса я мог ручками править базу..
Спасибо.

PS. юзаю первой строкой # encoding: cp1251

Автор: batman 18.10.2006, 06:43
Цитата(cherep @  18.10.2006,  00:13 Найти цитируемый пост)
юзаю первой строкой # encoding: cp1251 


Поставь # -*- coding: utf-8 -*-

Дальше поделись будь добр, как дела smile 

Автор: batman 18.10.2006, 08:18
И если можно поподробнее про установку драйверов и настройку. smile 

Автор: cherep 18.10.2006, 14:13
К сожалению с 
# -*- coding: utf-8 -*-
эффект такой же как и в случае с использованием u"строка", т.е. питон с sqlite работают без проблем, а вот в Access - русские кракозябрами.

А установка несложная. Поискал в гугле "sqlite odbc". Нашел установщик, он мне скопировал в windows\system32 3 длл-ки - odbc дрова, собсна и все. Когда захочешь открыть потом в Аксессе базу данных выбираешь открыть -> в типах файлов выбираешь ODBC databases(), там выскакивает окошко -> там выбираешь вторую закладку(Machine Data Source), жмешь New -> выбираешь нужный драйвер sqlite (там их 3, нужно тот что sqlite3) -> потом собсно указываешь файлик базы и название для вновь созданного соединения... Вот собственно и все smile

Вот мне еще посоветовали, достаточно полезное : http://www.python.promsoft.ru/index.php?action=forum&id=3314#id_3314
правда поставил я этот sqlitebrowser, но он мне не понравился - мало возможностей, и чета он у меня отказался править одну табличку, хотя русский действительно отображает правильно.

Автор: proDiva 18.10.2006, 14:27
Я не думаю, что могу помочь, но у меня была подобная ситуация, только я работала с dbf-таблицей. Значит я делала так:
при записи в таблицу:
    str=u'дурики'
    field_value=str.encode("cp1251")
при возврате данных из таблицы:
    tmp=field_value.decode("cp1251")
Авось поможет smile 

Автор: batman 18.10.2006, 14:33
У меня MS Access заработал русскими буквами без проблемм. А в sqlitebrowser козябрики. Так-то smile 

Автор: pythonwin 19.10.2006, 07:09
cherep, работай через utf-8 smile

Автор: batman 20.10.2006, 10:27
Ну, как дела? smile 

Автор: cherep 20.10.2006, 11:20
Короче дела так как и были... Как я понял там только для sqlite2 было 2 драйвера - обычный и юникодный, а для sqlite3 - только обычный... И походу тут ничего не сделать с Access'ом.

Автор: batman 20.10.2006, 11:43
Нее ты неправ я с sqlite3 работаю м с Access'ом всё Ок! smile 

Автор: cherep 20.10.2006, 19:13
то есть ты пишешь в базу именно в юникоде, и в аксессе у тебя все ништяк отображается? Хм.. Хз че за ботва.. У тебя винда русская?

Потому как когда я пишу юникод, у меня в аксессе кракозябры.. Когда пишу ручками в аксессе русские буквы - pysqlite не может прочитать  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)