Python 3 + FDB: UnicodeDecodeError

Я хочу подключиться к БД Firebird 2.1, которая использует cp1251, выполнить инструкцию и получить результат. Вот что я делаю:

import fdb

def get_zone(reg, sps):
    con = fdb.connect(
        dsn='172.16.16.77:database',
        user='SYSDBA', password='1234',
        sql_dialect=3, charset='WIN1251'
    )
    cur = con.cursor()
    select = ("SELECT ZONE "
          "FROM ZONES "
          "WHERE ZONE_NAME LIKE "
          + reg[1:-3] + "% "
          "AND ZONE < 600000 "
          "AND ZONE NAME CONTAINING 'СПС'")
    if not sps:
        select = select[:-16] + 'NOT' + select[-17:]
    cur.execute(select)
    return cur[0]

cur.execute(select) прерывает с ошибкой UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf0 in position 0: unexpected end of data
Я хочу знать две вещи:

  1. Как мне избавиться от ошибки
  2. Является ли тот факт, что Python 3 работает в основном с Unicode опасным в контексте доступа к WIN1251 закодированная база данных? Если это так, подскажите мне, что мне делать / избегать / и т.д.

На вопрос @VivekSable: прямо перед ошибкой select переменная содержит следующую строку:
SELECT ZONE FROM ZONES WHERE ZONE_NAME LIKE 'Краснодарский кр%' AND ZONE < 600000 AND ZONE NAME CONTAINING 'СПС'

1 ответ

Решение

Любая строка запроса, отправленная на WIN1251 база данных должна быть изначально обработана с .encode('cp1251') метод.

Другие вопросы по тегам