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

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

Пробовал в скрипте указывать кодировку -
# -*- coding: utf-8 -*-
import os, sys
import psycopg2
doza_and
devoratrix
при тестривании кода текст ошибок выводится жутко кривой
Это наверное в консоль выводится. Попробуйте поймать сообщения в файл и понять в чем проблема. Какая кодировка получилась. Тут скорее надо играться с локалью или перставить кодировку консоли.
PooH
chcp 65001
Ky391
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();
J.R.
.
py.user.next
Ky391
Причем и в консоль, и в файл попадает однаковая строка.
В файл пишется кортеж, приведённый к строке, а надо файл открыть в правильной кодировке (codecs.open()) и писать в него строку, взятую из кортежа.
Ky391
J.R.
Спасибо! Почти так и решил проблему!
Ковырял варианты и гугл, пока ждал ответа на форуме.
Ky391
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 с именем таблицы БОЛЬШИМИ_БУКВАМИ. Это реально?
PooH
Ky391
Осталось подружить psycopg2 с именем таблицы БОЛЬШИМИ_БУКВАМИ. Это реально?
Поместите имя таблицы в двойные кавычки. Вот только чем вам не нравиться имя в нижнем регистре?
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