Python 3 + FDB:UnicodeDecodeError

时间:2015-02-11 08:36:29

标签: python unicode fdb

我想连接到使用cp1251的Firebird 2.1 DB,执行语句并获得结果。 这就是我的所作所为:

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. 在访问WIN1251编码数据库的上下文中,Python 3是否主要使用Unicode?如果是这样,请指导一下我应该做什么/避免/等。
  3. To @VivekSable问题:在错误之前,select变量包含以下字符串:
    SELECT ZONE FROM ZONES WHERE ZONE_NAME LIKE 'Краснодарский кр%' AND ZONE < 600000 AND ZONE NAME CONTAINING 'СПС'

1 个答案:

答案 0 :(得分:0)

发送到WIN1251数据库的任何查询字符串都应该使用.encode('cp1251')方法进行处理。