Магія unicode у psycopg2

При написанні простенького веб-сервісу на Python/Django з доступом напряму до PostgreSQL, я зіткнувся з дивною поведінкою. Коли код запускався на тестовому сервері Django (manage.py runserver), psycopg2 вертав рядки як 'str' у кодуванні UTF-8. А коли запускався через WSGI під Apache2, то unicode. Я спочатку не вникав, чому так, але правити код на сервері після кожного оновлення, коли полізуть помилки, це не діло.

Маю підозру, що Django-вський сервер звертає увагу на # -*- coding: utf-8 -*-, тоді як mod_wsgi має це оголошення в носі, або навпаки.

Коли вже не знав що робити, як завжди допомогла документація. Там пишуть, що в Python 2 ви скоріш за все захочете завжди отримувати unicode. Так, я такий - хочу unicode. Для цього, одразу після імпорту psycopg2, задайте йому глобальні налаштування приведення типів, ось так:

import psycopg2

psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)

І не сушіть собі більше голову, у вас завжди буде unicode :)