Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2010 09:11:04

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

kinterbasdb и слова на русском в запросах

День добрый. Извините, если похожий вопрос уже был - через поиск не нашел.
Дело в следующем. Есть БД интербейсовская, использую ubuntu (UTF-8), firebird 2.1., kinterbasdb соответственно.
Для соединения используются следующие параметры.

self.con = k.connect(
host=None, database=DBFileName,
user='sysdba', password='masterkey',
dialect=3, charset='WIN1251'
)
это кусок функции поиска пациента.
SELECT = r"SELECT id, fio, sex FROM card WHERE fio LIKE '%" + str(patientName) + r"%'"
self.curs.execute(SELECT)
Проблема в том, что поиск по словам на английском и цифрам идет, а по русским словам нет. пустой ответ. Похоже charset='WIN1251' недостаточно и нужно еще вручную строки перекодировать, я правильно понимаю? Если да, то как лучше?

И еще, доп. вопрос, как сделать поиск регистронезависимым.



Офлайн

#2 Ноя. 2, 2010 09:39:00

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

kinterbasdb и слова на русском в запросах

С регистронезависимостью разобрался, преобразовал строку к такому виду

SELECT = r"SELECT id, fio, sex FROM card WHERE lower(fio) LIKE '%" + patientName.lower() + r"%'"
осталось с русским додумать



Офлайн

#3 Ноя. 2, 2010 12:53:12

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

kinterbasdb и слова на русском в запросах

Продолжение. Дело действительно в кодировках. После следующего костыля

patientName.lower().decode('utf-8').encode('cp1251')
все заработало. Вот только конструкция уж больно корявая. А напрямую 8-ми битные кодировки никак нельзя преобразовать?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version