Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 26, 2017 10:44:53

Al-se
Зарегистрирован: 2017-01-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

Задача:
Есть база mssql. Внутри естественно (Микрософт всё-таки) кодировка cp1251 и русские строки в полях.
Необходимо выбрать из базы данные определенные данные и сохранить в текстовый файл.
Решение:

import pymssql, sys, csv, os
conn = pymssql.connect(server='10.1.1.1', user='test', password='test', database='TST1', charset='cp1251')
cursor = conn.cursor()

selectTxt1 = ‘'’select

from Subscr ss
where (ss.EE=0 and ss.Number ='''

ls = ‘251’ # так - работает
# ls = ‘251А’ - а так - не работает, т.к. не находит 251А с русской буквой А
selectTxt2 = selectTxt1 + ‘\’' + ls + ‘\’)'

cursor.execute(selectTxt2)
row2 = cursor.fetchone()

Затем row2 разбирается и записывается в файл без проблем.

Проблема:
В where надо подставить строку с русской (русскими) буквами в кодировке cp1251 так, чтобы select находил то, что нужно. Если сделать selectTxt2.encode('cp1251'), то всё равно ничего не находит.
Python 3.5
P.S. Естественно, если скрипт выполнить руками не в Питоне, то всё с русскими буквами находится, т.к. в базе оно есть.
Буду благодарен за помощь.

Отредактировано Al-se (Янв. 26, 2017 10:45:44)

Офлайн

#2 Янв. 26, 2017 11:07:51

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

 encode().decode()



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Янв. 26, 2017 11:37:57

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.

Офлайн

#4 Янв. 26, 2017 11:50:34

Al-se
Зарегистрирован: 2017-01-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

ZerG

Не помогает.

Офлайн

#5 Янв. 26, 2017 12:55:59

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

А в какой кодировке у вас сам файл на питоне?
Иначе получается что вы при поиске пытаетесь подставить даныне в utf-8 при поиске в базе с cp1251
попробуйте в месте поиска делать decode('cp1251')



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Янв. 26, 2017 13:18:10

Al-se
Зарегистрирован: 2017-01-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

ZerG
А в какой кодировке у вас сам файл на питоне? Иначе получается что вы при поиске пытаетесь подставить даныне в utf-8 при поиске в базе с cp1251попробуйте в месте поиска делать decode('cp1251')

Файл на Питоне в кодировке utf-8. Понятно, что надо сделать строку cp1251, именно по этому поиск не срабатывает. Но как? Попытка сделать так: encode('utf-8').decode('cp1251') не помогла.

Офлайн

#7 Янв. 26, 2017 13:18:58

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

Я же выше написал

decode('cp1251')



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#8 Янв. 26, 2017 13:22:23

Al-se
Зарегистрирован: 2017-01-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

ZerG
Я же выше написал
В 3-ем Питоне str не имеет атрибута decode, только encode.

Отредактировано Al-se (Янв. 26, 2017 13:23:48)

Офлайн

#9 Янв. 26, 2017 13:35:45

Al-se
Зарегистрирован: 2017-01-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

4kpt_IV
Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.

Как-то там в документации не очень явно написано. Что-то типа:“всё конвертирует, но если у вас старое приложение (я так понял -база), то могут понадобиться дополнительные усилия…”

Офлайн

#10 Янв. 26, 2017 13:51:38

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Питон + mssql + кодировка

как то у вас не все хорошо там! вы уверены что все условия правильные?
Особенно с с базой?
Может вы сам запрос не правильно формируете?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Янв. 26, 2017 13:52:08)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version