Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 1, 2011 15:34:16

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PostgreSQL 8.4 проблема с кодировкой

Доброе время суток, пытаюсь выполнить пример из умной книжки:

def insert_tabl_wd():
weekdays=["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница",
"Суббота","Воскресенье"]
import psycopg2
db=psycopg2.connect("host='localhost' dbname='tvprogram' user='postgres' password='abcd'") # коннеект с БД
cu=db.cursor() # назначение курсора
cu.execute("""DELETE FROM wd;""") # УДАЛИТЬ все строки из таблицы wd
cu.executemany("""INSERT INTO wd VALUES (%s,%s);""", enumerate(weekdays))
db.commit()
db.close()
Вылезает ошибка не соответствия кодировок. БД создана с кодировкой UTF8, попытался создать БД с другой кодировкой - WIN1251, не получилось, выдал ошибку “new encoding is incompatible with the encoding of the template database ”, НО я понимаю, что это не панацея создавать БД в другой кодировке, просто решил поэкспериментировать …

ПОдскажите пожалуйста, как можно решить сию проблему с кодировками, может слово умное надо куда нить вставить ??? Заранее спасибо.
ПС ОС Виндовс Виста



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

#2 Окт. 4, 2011 12:33:40

nerijus
От:
Зарегистрирован: 2010-06-03
Сообщения: 93
Репутация: +  1  -
Профиль   Отправить e-mail  

PostgreSQL 8.4 проблема с кодировкой

Везде используйте юникодные строки, т.е. добавьте букву “u” перед строками. А то что база у вас utf-8 это хорошо.

И еще в начале напишите: psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)



Отредактировано (Окт. 4, 2011 13:23:14)

Офлайн

#3 Окт. 6, 2011 21:53:21

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PostgreSQL 8.4 проблема с кодировкой

Спасибо за отклик!!! Сделал как вы сказали:

def insert_tabl_wd():
import psycopg2
db=psycopg2.connect("host='localhost' dbname='tvprogram' user='postgres' password='abcd'") # коннеект с БД
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
weekdays=[u"Воскресенье",u"Понедельник",u"Вторник",u"Среда",u"Четверг",u"Пятница",
u"Суббота",u"Воскресенье"]
print weekdays
cu=db.cursor() # назначение курсора
cu.execute("""DELETE FROM wd;""") # УДАЛИТЬ все строки из таблицы wd
cu.executemany("""INSERT INTO wd VALUES (%s,%s);""", enumerate(weekdays)) # executemany - выполняет серию запросов или команд, подставляя параметры в заданный шаблон
# enumerate создает список пар номер-значение, напр. [(0,'a'), (1,'b'),(2,'c')]

cu.execute('select * from wd')
numrows=int(cu.rowcount) # количество записей, затронутых в ходе последнего запроса
print numrows
for x in range(0,numrows): # перебираем последовательно от 0 элемента до конца записей
row = cu.fetchone() # возвращает следующую запись (в виде последовательности) из результата запроса или ноне при отсутствии данных
print row[0], '-->', row[1]
y=+1

db.commit()
db.close()


insert_tabl_wd()
Теперь данные вносятся в таблицу БД без проблем, вот только теперь на рисовалась проблема с выводом этих данных на экран, выводятся они в виде иероглифов, подскажите пожалуйста в чем может быть ошибка?



Мыши плакали, кололись, но продолжали жрать кактус …

Отредактировано (Окт. 6, 2011 21:54:02)

Офлайн

#4 Окт. 7, 2011 09:02:24

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

PostgreSQL 8.4 проблема с кодировкой

Попробуйте так:
кодировку python скрипта смените на UTF-8, затем
в самое начало скрипта вставьте:

# -*- coding: utf-8 -*-



Офлайн

#5 Окт. 9, 2011 12:22:17

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PostgreSQL 8.4 проблема с кодировкой

Большое спасибо, сделал так как вы написали и всё заработало !!!



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version