Al-se
Янв. 26, 2017 10:44:53
Задача:
Есть база 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. Естественно, если скрипт выполнить руками не в Питоне, то всё с русскими буквами находится, т.к. в базе оно есть.
Буду благодарен за помощь.
4kpt_IV
Янв. 26, 2017 11:37:57
Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.
ZerG
Янв. 26, 2017 12:55:59
А в какой кодировке у вас сам файл на питоне?
Иначе получается что вы при поиске пытаетесь подставить даныне в utf-8 при поиске в базе с cp1251
попробуйте в месте поиска делать decode('cp1251')
Al-se
Янв. 26, 2017 13:18:10
ZerG
А в какой кодировке у вас сам файл на питоне? Иначе получается что вы при поиске пытаетесь подставить даныне в utf-8 при поиске в базе с cp1251попробуйте в месте поиска делать decode('cp1251')
Файл на Питоне в кодировке utf-8. Понятно, что надо сделать строку cp1251, именно по этому поиск не срабатывает. Но как? Попытка сделать так: encode('utf-8').decode('cp1251') не помогла.
Al-se
Янв. 26, 2017 13:22:23
ZerG
Я же выше написал
В 3-ем Питоне str не имеет атрибута decode, только encode.
Al-se
Янв. 26, 2017 13:35:45
4kpt_IV
Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.
Как-то там в документации не очень явно написано. Что-то типа:“всё конвертирует, но если у вас старое приложение (я так понял -база), то могут понадобиться дополнительные усилия…”
ZerG
Янв. 26, 2017 13:51:38
как то у вас не все хорошо там! вы уверены что все условия правильные?
Особенно с с базой?
Может вы сам запрос не правильно формируете?