Ошибка UnicodeDecodeError при обращении к DB FireBird2.5 через Python

Рейтинг: 0Ответов: 1Опубликовано: 10.02.2023

Всем привет!

Ребят, помогите с решением вопроса. На работе возникла необходимость через Python обратиться к DB FireBird2.5, данная база используется в системе контроля управления доступом PERCo.

Для начала сделали простенький запрос:

import fdb 

con = fdb.connect(dsn='192.168.128.15:D/DB/SCD17K.fdb', user='SYSDBA', password='pass',  sql_dialect=3, charset='utf-8')

cur=con.cursor()

cur.execute('SELECT count(*) from staff')

answer = cur.fetchall()

print(answer)

При этом возникает ошибка:

Traceback (most recent call last):
  File "/tmp/test.py", line 4, in <module>
    con = fdb.connect(dsn='192.168.128.15:D/DB/SCD17K.fdb', user='SYSDBA', password='pass',  sql_dialect=3, charset='utf-8')
  File "/home/admin1/.local/lib/python3.10/site-packages/fdb/fbcore.py", line 869, in connect
    raise exception_from_status(DatabaseError, _isc_status,
  File "/home/admin1/.local/lib/python3.10/site-packages/fdb/fbcore.py", line 607, in exception_from_status
    msglist.append('- ' + (msg.value).decode(sys_encoding))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 0: invalid continuation byte

Понимаю, что проблема с кодировкой, пробовал что-то типа:

query = 'SELECT count(*) from staff'.encode('utf-8')

cur.execute(query)

но, собственно, результата никакого нет.

Причем через Perl это делалось:

...password='pass',  id_dialect=3, id_charset='utf-8'...

и все работало.

Подскажите, пожалуйста, как можно решить данную проблему.

Summary info about DB:

Database file ODS Version 11.2

Page size 4096

Pages 1226071

Size on disk 4.68GB

Page buffers 2048 

Read only false

 
Settings 

Dialect 3

Default character set UTF8

Sweep interval 20000

Forced writes

Информация о ПО:

v.python=3.10.9, fdb-2.0.2 ...

ну и какой-то AstraLinux там не помню уже.

Ответы

▲ 0

Если мне не изменяет память, у SCD17K.FDB кодировка WIN1251