Форум сайта python.su
Доброго времени суток!
Недавно начал использовать адаптер к postgresql psycopg2. Но с ним есть большая проблема - при тестривании кода текст ошибок выводится жутко кривой, я так понял проблема с кодировкой. Прошу, кто знает как это лечиться, напишите.
Спасибо
Офлайн
Art-master
Доброго времени суток!Недавно начал использовать адаптер к postgresql psycopg2. Но с ним есть большая проблема - при тестривании кода текст ошибок выводится жутко кривой, я так понял проблема с кодировкой. Прошу, кто знает как это лечиться, напишите.Спасибо
Офлайн
devoratrixЭто наверное в консоль выводится. Попробуйте поймать сообщения в файл и понять в чем проблема. Какая кодировка получилась. Тут скорее надо играться с локалью или перставить кодировку консоли.
при тестривании кода текст ошибок выводится жутко кривой
Офлайн
chcp 65001
Офлайн
PooHДоброго времени суток!
chcp 65001
# -*- coding: utf-8 -*- import psycopg2; conn=psycopg2.connect(database="prot", user="xxx", password="xxx", host="192.168.0.1"); psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) cur=conn.cursor(); cur.execute("""SELECT * from py_test_table"""); f = open('log.txt', 'w'); f.write ('Данные в БД :\n'); for i in range(0,int(cur.rowcount)): f.write (str(cur.fetchone())); f.write('\n'); conn.commit(); conn.close(); f.close();
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 16:25:52)
Офлайн
Ky391В файл пишется кортеж, приведённый к строке, а надо файл открыть в правильной кодировке (codecs.open()) и писать в него строку, взятую из кортежа.
Причем и в консоль, и в файл попадает однаковая строка.
Отредактировано py.user.next (Авг. 13, 2015 15:22:12)
Офлайн
J.R.Спасибо! Почти так и решил проблему!
Офлайн
py.user.nextС учетом ответа выше у меня получилось добиться читаемости в файле и на экране вот так:
и писать в него строку, взятую из кортежа.
x = []; f = open('log.txt', 'w'); f.write ('Данные в БД :\n');#А вот это поломалось и выводится теперь как "Данные РІ БД :" в итоге удалил. for i in range(0,int(cur.rowcount)): x.append (cur.fetchone()); print (x[i]); id, name, w_date, w_time = x[i]; #Сразу дало счастье print ('\nID=%s, Name=%s, W_date=%s, W_time=%s') % (id, name, w_date, w_time); name = name.encode('cp1251'); #А это осчастливило вывод в файл. f.write ('\n{};{};{};{};'.format(id, name, w_date, w_time)); f.close();
Отредактировано Ky391 (Авг. 13, 2015 16:05:49)
Офлайн
Ky391Поместите имя таблицы в двойные кавычки. Вот только чем вам не нравиться имя в нижнем регистре?
Осталось подружить psycopg2 с именем таблицы БОЛЬШИМИ_БУКВАМИ. Это реально?
Офлайн