Найти - Пользователи
Полная версия: Питон + mssql + кодировка
Начало » Базы данных » Питон + mssql + кодировка
1 2 3 4
Al-se
Задача:
Есть база 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. Естественно, если скрипт выполнить руками не в Питоне, то всё с русскими буквами находится, т.к. в базе оно есть.
Буду благодарен за помощь.
ZerG
 encode().decode()
4kpt_IV
Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.
Al-se
ZerG

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

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

Файл на Питоне в кодировке utf-8. Понятно, что надо сделать строку cp1251, именно по этому поиск не срабатывает. Но как? Попытка сделать так: encode('utf-8').decode('cp1251') не помогла.
ZerG
Я же выше написал
decode('cp1251')
Al-se
ZerG
Я же выше написал
В 3-ем Питоне str не имеет атрибута decode, только encode.
Al-se
4kpt_IV
Ответ на вопрос. Не задрачивать себя, а использовать SQLAlchemy. Она все конвертации возьмет на себя.

Как-то там в документации не очень явно написано. Что-то типа:“всё конвертирует, но если у вас старое приложение (я так понял -база), то могут понадобиться дополнительные усилия…”
ZerG
как то у вас не все хорошо там! вы уверены что все условия правильные?
Особенно с с базой?
Может вы сам запрос не правильно формируете?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB