Уведомления

Группа в Telegram: @pythonsu

#1 Июль 18, 2014 11:29:17

Art-master
От: Россия, Ростов-на-Дону
Зарегистрирован: 2013-06-08
Сообщения: 78
Репутация: +  1  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

Доброго времени суток!
Недавно начал использовать адаптер к postgresql psycopg2. Но с ним есть большая проблема - при тестривании кода текст ошибок выводится жутко кривой, я так понял проблема с кодировкой. Прошу, кто знает как это лечиться, напишите.

Спасибо

Офлайн

#2 Июль 23, 2015 10:34:10

devoratrix
Зарегистрирован: 2015-07-23
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

Art-master
Доброго времени суток!Недавно начал использовать адаптер к postgresql psycopg2. Но с ним есть большая проблема - при тестривании кода текст ошибок выводится жутко кривой, я так понял проблема с кодировкой. Прошу, кто знает как это лечиться, напишите.Спасибо

Пробовал в скрипте указывать кодировку -
# -*- coding: utf-8 -*-
import os, sys
import psycopg2

Офлайн

#3 Июль 23, 2015 20:49:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

devoratrix
при тестривании кода текст ошибок выводится жутко кривой
Это наверное в консоль выводится. Попробуйте поймать сообщения в файл и понять в чем проблема. Какая кодировка получилась. Тут скорее надо играться с локалью или перставить кодировку консоли.



Офлайн

#4 Июль 24, 2015 06:14:32

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

chcp 65001



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Авг. 13, 2015 11:31:55

Ky391
Зарегистрирован: 2015-08-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

PooH
chcp 65001
Доброго времени суток!
Запись такой строки в bat приводит к его вылету на WinXP*32.
поиском по форуму решил большую часть проблем с кодировкой, осталось только как-то перевести ответ от БД, который сейчас выдаётся в виде: u'\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430', вместо ‘Тестовая строка’. Причем и в консоль, и в файл попадает однаковая строка.

Не подскажете как это осуществить?

WinXP*32, ActivePython 2.7, PostgreSQL+psycopg2, код следущий:
# -*- 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();

Офлайн

#6 Авг. 13, 2015 14:52:12

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Psycopg2, проблема с кодировкой

.

Отредактировано J.R. (Фев. 27, 2016 16:25:52)

Офлайн

#7 Авг. 13, 2015 15:20:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9754
Репутация: +  843  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

Ky391
Причем и в консоль, и в файл попадает однаковая строка.
В файл пишется кортеж, приведённый к строке, а надо файл открыть в правильной кодировке (codecs.open()) и писать в него строку, взятую из кортежа.



Отредактировано py.user.next (Авг. 13, 2015 15:22:12)

Офлайн

#8 Авг. 13, 2015 15:30:05

Ky391
Зарегистрирован: 2015-08-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

J.R.
Спасибо! Почти так и решил проблему!
Ковырял варианты и гугл, пока ждал ответа на форуме.

Офлайн

#9 Авг. 13, 2015 15:33:51

Ky391
Зарегистрирован: 2015-08-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

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();
причем вывод на экран сразу заработал хорошо, после прогона ответа БД через отдельную переменную Name.

Ещё раз спасибо откликнувшимся!

Осталось подружить psycopg2 с именем таблицы БОЛЬШИМИ_БУКВАМИ. Это реально?

Отредактировано Ky391 (Авг. 13, 2015 16:05:49)

Офлайн

#10 Авг. 13, 2015 17:23:47

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Psycopg2, проблема с кодировкой

Ky391
Осталось подружить psycopg2 с именем таблицы БОЛЬШИМИ_БУКВАМИ. Это реально?
Поместите имя таблицы в двойные кавычки. Вот только чем вам не нравиться имя в нижнем регистре?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version