Форум сайта python.su
Задача:
Есть база 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)
Офлайн
encode().decode()
Офлайн
Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.
Офлайн
ZerG
Офлайн
А в какой кодировке у вас сам файл на питоне?
Иначе получается что вы при поиске пытаетесь подставить даныне в utf-8 при поиске в базе с cp1251
попробуйте в месте поиска делать decode('cp1251')
Офлайн
ZerG
А в какой кодировке у вас сам файл на питоне? Иначе получается что вы при поиске пытаетесь подставить даныне в utf-8 при поиске в базе с cp1251попробуйте в месте поиска делать decode('cp1251')
Офлайн
Я же выше написал
decode('cp1251')
Офлайн
ZerGВ 3-ем Питоне str не имеет атрибута decode, только encode.
Я же выше написал
Отредактировано Al-se (Янв. 26, 2017 13:23:48)
Офлайн
4kpt_IV
Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.
Офлайн
как то у вас не все хорошо там! вы уверены что все условия правильные?
Особенно с с базой?
Может вы сам запрос не правильно формируете?
Отредактировано ZerG (Янв. 26, 2017 13:52:08)
Офлайн