Проблемы кодирования utf-8 при использовании python pyodb c для подключения к базе данных Sybase в контейнере Docker - PullRequest
0 голосов
/ 28 февраля 2020

Когда я создаю соединение, используя pyodbc

connectionString = ('DRIVER='+driver+';SERVER='+server+';PORT='+port+';UID='+username+';PWD='+password+';DATABASE='+db_environment)
db_connection_dw = pyodbc.connect(connectionString)
cursor = db_connection_dw.cursor()
cursor.execute(sql_query_string)
print(cursor.fetchone())

, я получаю странные результаты относительно полей типа CharField, которые содержат специальные символы. Например, я получаю 'M \ x8adi c' вместо 'Mèdi c'

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONIOENCODING=utf-8

ADD devartodbcase_amd64.deb /tmp/devartodbcase_amd64.deb
RUN apt-get clean && \
    apt-get update && \
    apt-get install -y locales locales-all && \
    locale-gen ca_ES.UTF-8 && \
    apt-get install -y gettext libgettextpo-dev g++ unixodbc unixodbc-dev libaio1 && \
    cd /tmp/ && dpkg -i devartodbcase_amd64.deb

ENV LANG ca_ES.UTF-8
ENV LC_ALL ca_ES.UTF-8

COPY ./requirements.txt /requirements.txt
RUN pip install --upgrade pip==20.0.2 && pip install -r /requirements.txt

RUN mkdir /app
WORKDIR /app
COPY ./app/ /app

needs.txt

Django==2.2.7
djangorestframework==3.10.3
django-filter==2.2.0
psycopg2==2.8.4
pyodbc==4.0.28

numpy==1.18.1
pandas==1.0.1

python-decouple==3.3
dj-database-url==0.5.0

django-widget-tweaks==1.4.5

SQLAlchemy==1.3.13

Является ли проблема, вызванная конфигурацией драйвера, конфигурацией Dockerfile? Заранее спасибо

1 Ответ

0 голосов
/ 28 февраля 2020

Вы должны установить кодировку соединения, так как клиент БД получает результаты в некоторой кодировке сервера БД по умолчанию, которая не может правильно интерпретироваться в вашем скрипте. Вы можете сделать это после получения соединения с db_connection_dw.setencoding("utf-8"). См. Следующее руководство https://github.com/mkleehammer/pyodbc/wiki/Unicode

...