Найти - Пользователи
Полная версия: PostgreSQL 8.4 проблема с кодировкой
Начало » Базы данных » PostgreSQL 8.4 проблема с кодировкой
1
xenon
Доброе время суток, пытаюсь выполнить пример из умной книжки:
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 ”, НО я понимаю, что это не панацея создавать БД в другой кодировке, просто решил поэкспериментировать …

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

И еще в начале напишите: psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
xenon
Спасибо за отклик!!! Сделал как вы сказали:
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()
Теперь данные вносятся в таблицу БД без проблем, вот только теперь на рисовалась проблема с выводом этих данных на экран, выводятся они в виде иероглифов, подскажите пожалуйста в чем может быть ошибка?
magnet85
Попробуйте так:
кодировку python скрипта смените на UTF-8, затем
в самое начало скрипта вставьте:
# -*- coding: utf-8 -*-
xenon
Большое спасибо, сделал так как вы написали и всё заработало !!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB